[Zerobase][기초수학] 진법, 수열, 시그마, 등차/등비수열, 계차/피보나치 수열

솔비·2023년 12월 7일

💻 Python. w/zerobase

목록 보기
22/33
post-thumbnail

기초수학 w/python

1. 진법

진법이란?
특정 숫자 몇개를 사용하여 수를 표시하는 방법

📁 Python 활용법

A. x진수 -> y진수로 바꿀 때

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

B. x진수 -> 10진수

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

2. 수열

수열이란?
규칙성을 가지고 나열 되어 있는 수들

여기서 an을 일반항이라고 부른다.

💡항들의 합과 항의 관계

만약, a4를 구하고 싶다면 a5~an까지의 합에서 a3까지의 합을 빼면 된다.
단, n>=2크고 a1 = s1


3. 등차수열

등차수열이란?
연속된 두항의 차이가 일정한 수열

  • 두항의 차 : 공차(d)

A.일반항 공식

an = a1+(n-1)*d

📁 A. Python 활용법

다음 수열을 보고 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}')

B.등차중앙

연속된 세항에서 가운데 항
a(n-1) + a(n+1) / 2 = an (등차중앙)

C.등차수열의 합

sn = n(a1+an)/2
n : 항갯수
sn : 전체수열합

📁 C. Python 활용법

실습 다음수열을 보고 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}')

4. 등비수열

등비수열이란?
연속된 두항의 비가 일정한 수열

e.g.
2 6 18 54 162 486
공비(r) = 3

A. 일반항 공식

an = a1 * r^(n-1)

📁 A. Python 활용법

실습 : 다음 수열을 보고 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}')

B. 등비중앙

연속된 세항에서 가운데 항
a(n-1) * a(n+1) = an^2

C. 등비수열의 합

sn = a1 * (1-(r^n)) / (1-r)
n : 항 갯수
sn : 전체수열의 합

📁 C. Python 활용법

실습 : 다음 수열을 보고 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}')

5. 시그마Σ

시그마Σ란?
수열의 합을 나타내는 기호이다.

시그마 뒤 일반항은 an을 구하는공식

  • 등차수열의 경우 : a1 + (n-1)d
  • 등비수열의 경우 : a1 * r^(n-1)

즉 시그마 일반항 = n항까지의 합


6.계차수열

계차수열이란?
공차가 등차수열인 수열

계차수열의 일반항

위 수열을 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

📁 Python 활용법

#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}')

7. 피보나치 수열

📁 Python 활용법

#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}')

제로베이스 데이터취업스쿨
Daily Study Note
profile
Study Log

0개의 댓글