
진법이란?
특정 숫자 몇개를 사용하여 수를 표시하는 방법
2진수(binary) : bin()
8진수(octal) : oct()
16진수(Hexadecimal) : hex()
d_num = 30
print('2진수 : {}'.format(bin(d_num))) #2진수 : 0b11110
print('8진수 : {}'.format(oct(d_num))) #8진수 : 0o36
print('16진수 : {}'.format(hex(d_num))) #16진수 : 0x1e
print('2진수 : {}'.format(format(d_num,'#b'))) #2진수 : 0b11110
print('8진수 : {}'.format(format(d_num,'#o'))) #8진수 : 0o36
print('16진수 : {}'.format(format(d_num,'#x'))) #16진수 : 0x1e
print('{0:#b}\t{0:#o}\t{0:#x}'.format(d_num,d_num,d_num)) #0b11110 0o36 0x1e
print('{0:#b}\t{0:#o}\t{0:#x}'.format(d_num)) #0b11110 0o36 0x1e
2진수 0b / 8진수 0o / 16진수 0x 뒤가 해당 진수값
만약 제외하고싶다면? #제거
d_num = 30
print('2진수 : {}'.format(format(d_num,'b'))) #2진수 : 11110
print('8진수 : {}'.format(format(d_num,'o'))) #8진수 : 36
print('16진수 : {}'.format(format(d_num,'x'))) #16진수 : 1e
print('{0:b}\t{0:o}\t{0:x}'.format(d_num)) #11110 36 1e
int('값',값의진수)
#30의 2진수값 0b11110
#30의 8진수값 0o36
#30의 16진수값 0x1e
print('2진수(0b11110) -> 10진수({})'.format(int('0b11110',2))) #30
print('8진수(0o36) -> 10진수({})'.format(int('0o36',8))) #30
print('16진수(0x1e) -> 10진수({})'.format(int('0x1e',16))) #30
수열이란?
규칙성을 가지고 나열 되어 있는 수들
여기서 an을 일반항이라고 부른다.
만약, a4를 구하고 싶다면 a5~an까지의 합에서 a3까지의 합을 빼면 된다.
단, n>=2크고 a1 = s1
등차수열이란?
연속된 두항의 차이가 일정한 수열
- 두항의 차 : 공차(d)
an = a1+(n-1)*d
다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자
an = {2,5,8,11,14,17,20}
#an = a1+(n-1)*d 공식활용
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_d = int(input('공차(d) 입력 : '))
print(input_a1+(input_n-1)*input_d)
#공식없이
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_d = int(input('공차(d) 입력 : '))
result = 0
n=1
while n <= input_n :
if n==1 :
result = input_a1
#print(f'{input_n}번째 합의 값 : {result}')
n += 1
continue
result += input_d
#print(f'{n}번째 항의 값 : {result}')
n += 1
print(f'{input_n}번째 항의 값 : {result}')
연속된 세항에서 가운데 항
a(n-1) + a(n+1) / 2 = an (등차중앙)
sn = n(a1+an)/2
n : 항갯수
sn : 전체수열합
실습 다음수열을 보고 n번째 항까지의 합을 출력하는 프로그램을 만들자
an = {5,9,13,17,21,25,29}
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_d = int(input('공차(d) 입력 : '))
#공식없이
result = 0
n = 1
while n <= input_n :
if n == 1 :
result = input_a1
n += 1
continue
result += input_d
n += 1
print(f'{input_n}항의 값 : {result}')
#공식활용 an = a1 + (n-1)d
result = input_a1 + (input_n -1) * input_d
print(f'{input_n}항의 값 : {result}')
#공식활용 sn = n(a1 + an)/2
sn = input_n*(input_a1+an) // 2
print(f'{input_n}항까지의 합 : {sn}')
등비수열이란?
연속된 두항의 비가 일정한 수열e.g. 2 6 18 54 162 486 공비(r) = 3
an = a1 * r^(n-1)
실습 : 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자
#an = {2,4,8,16,32,64,128,256 ...}
#공식없이
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_r = int(input('공비(r) 입력 : '))
an = 0
n = 1
while n <= input_n :
if n == 1 :
an = input_a1
n += 1
an *= input_r
n += 1
print(f'{input_n}번째 항의 값 : {an}')
#공식활용 an = a1 * r^n-1
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_r = int(input('공비(r) 입력 : '))
an = input_a1 * (input_r ** (input_n-1))
print(f'{input_n}번째 항의 값 : {an}')
연속된 세항에서 가운데 항
a(n-1) * a(n+1) = an^2
sn = a1 * (1-(r^n)) / (1-r)
n : 항 갯수
sn : 전체수열의 합
실습 : 다음 수열을 보고 n번째 항까지의 합을 출력하는 프로그램을 만들어보자
#an = {5,15,45,135,405,1215,3645 ..}
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_r = int(input('공비(r) 입력 : '))
#공식없이
an = 0
sn = 0
n = 1
while n <= input_n :
if n == 1 :
an = input_a1
sn += an
n += 1
an *= input_r
sn += an
n += 1
print(f'{input_n}까지 항의 합 : {sn}')
input_a1 = int(input('a1값 입력 : '))
input_n = int(input('n 입력 : '))
input_r = int(input('공비(r) 입력 : '))
#공식사용 sn = a1 * (1-r^n) / (1-r)
sn = input_a1 * (1-(input_r ** input_n)) // (1-input_r)
print(f'{input_n}까지 항의 합 : {sn}')
시그마Σ란?
수열의 합을 나타내는 기호이다.
시그마 뒤 일반항은 an을 구하는공식
- 등차수열의 경우 : a1 + (n-1)d
- 등비수열의 경우 : a1 * r^(n-1)
즉 시그마 일반항 = n항까지의 합
계차수열이란?
공차가 등차수열인 수열
위 수열을 an 아래 수열을 bk이라고 할 때,
bk의 n-1까지의 합은 an-a1이다.
(일반항)an = a1 + (n-1)d
(합)sn = n(a1+an)/2
공식을 bk에 대입하면
bk의 일반항은
3+(k-1)2
= 2k+1
시그마 k=1부터n-1까지의 bn의 합은
(합)n(a1+an)/2 / k =n-1
(n-1)(b1+(2(n-1)+1))/2
b1 = 3이므로
(n-1)(3+(2(n-1)+1))/2
=(n-1)(2n+2)/2
= 2n^2 -2 / 2
= n^2 -1
즉, an - a1 = n^2 -1
an - 0 = n^2 -1
an = n^2 -1
#an = {3,7,13,21,31,43,57..}
bk = {4,6,8,10 ..}
bk의 일반항 2k+2
bk의 합 : (n-1)(4+2(n-1)+2)/2
= (n-1)(2n+4)/2
= (2n^2 +2n - 4)/2
= n^2 + n -2
an-a1 = n^2 + n -2
#공식사용
#an-a1 = n^2 + n -2
#an = n^2 + n -2 + a1
input_a1 = int(input('a1 입력 : '))
input_an = int(input('an 입력 : '))
an = input_an ** 2 + input_an - 2 + input_a1
print(an)
#공식없이
input_a1 = int(input('a1 입력 : '))
input_n = int(input('n 입력 : '))
input_b1 = int(input('b1 입력 : '))
input_bd = int(input('b공차(d) 입력 : '))
an = 0
bn = 0
sum_an = 0
n=1
while n <= input_n :
if n == 1 :
an = input_a1
sum_an += an
bn = input_b1
n += 1
continue
an += bn
sum_an += an
bn += input_bd
n += 1
print(f'an의 {input_n}번째 항의 값 : {an}')
print(f'an의 {input_n}번째 항까지의 합 : {sum_an}')
#n번째 항과 n번째 항까지의 합을 구하라
input_n = int(input('n 입력 : '))
pre_n1 = 0
pre_n2 = 0
sum_n = 0
value = 0
n = 1
while n <= input_n :
if n == 1 :
value = 1
sum_n += value
pre_n2 = pre_n1
pre_n1 = value
n+=1
value = pre_n2 + pre_n1
sum_n += value
pre_n2 = pre_n1
pre_n1 = value
n += 1
print(f'{input_n}번째 항의 값 : {value}')
print(f'{input_n}번째 항까지의 합 : {sum_n}')