등비수열
연속된 두항의 비가 일정한 수열
ex)2,6,18,54,162.... 공비는 3
일반항 : 첫항 * 공비의 n-1제곱
등비중항 : 연속된 세 항 가운데 항
18*162 = 54의 제곱
등비수열의 합
첫항 * (1-(공비의 n제곱)) / (1-공비)
ex) 2,6,18,54 의 합은 80
2 (1-(3의 4제곱)) / (1-3)
2-80 / -2
-160 / -2
80
n번째 항 구하기
inputN1 = int(input('a1 입력: ')) #첫항의 값
inputR = int(input('공비 입력: '))
inputN= int(input('n 입력: ')) #몇번째 값을 알고싶은지
valueN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN1
print('{}번째 항의 값 : {}'.format(n,valueN))
n+=1
continue
valueN *= inputR
print('{}번째 항의 값 : {}'.format(n,valueN))
n+=1
print('{}번째 항의 값 : {}'.format(inputN,valueN))
#간단히
valueN = inputN1 * (inputR)**(inputN-1)
print('{}번째 항의 값 : {}'.format(inputN, valueN))
n번째 항까지의 합 구하기
inputN1 = int(input('a1 입력: ')) #첫항의 값
inputR = int(input('공비 입력: '))
inputN= int(input('n 입력: ')) #몇번째 값을 알고싶은지
valueN = 0
sumN = 0
n=1
while n <= inputN:
if n == 1:
valueN = inputN1
sumN += valueN
print('{}번째 항 까지의 합 : {}'.format(n,sumN))
n+=1
continue
valueN *= inputR
sumN += valueN
print('{}번쨰 항 까지의 합 : {}'.format(n,sumN))
n +=1
print('{}번쨰 항 까지의 합 : {}'.format(inputN,sumN))
#간단히 하면
valueN = inputN1 * inputR**(inputN-1)
sumN = inputN1 * (1-(inputR**inputN)) / (1-inputR)
print('{}번째 항 까지의 합 : {}'.format(inputN,int(sumN)))
시그마
시그마 : 수열의 합 (공비가 r인 수열에서 1항부터 n항까지의 항을 구하자)
등차수열의 합 / 등비수열의 합 위에서 한 방식으로 파이썬에서 만들 수 있다.
계차수열
계차수열 : 두항의 차로 이루어진 수열
ex)an = 0,3,8,15,24,35,48,63....
bn = 3,5,7,9,11,13,15 .... (위 수열의 항들 사이의 차이가 공차가 2인 등차수열)
즉 bn은 an의 계차수열
계차수열 이용해서 an 수열의 일반항 구하기
inputAN = int(input('an 입력: '))
inputAN1 = int(input('a1 입력: '))
inputBN1 = int(input('b1 입력: '))
inputBD = int(input('bn 공차 입력: '))
valueAN = 0
valueBN = 0
n=1
while n <= inputAN:
if n ==1:
valueAN = inputAN1
valueBN = inputBN1
print('an의 {}번째 항의 값 : {}'.format(n,valueAN))
print('bn의 {}번째 항의 값 : {}'.format(n,valueBN))
n +=1
continue
valueAN = valueAN + valueBN
valueBN = valueBN + inputBD
print('an의 {}번째 항의 값 : {}'.format(n, valueAN))
print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))
n +=1
print('an의 {}번째 항의 값 : {}'.format(inputAN, valueAN))
print('bn의 {}번째 항의 값 : {}'.format(inputAN, valueBN))
#an = {3,7,13,21,31,43,57}
#bn = { 4 6 8 10 12 14 }
#계차수열 시그마 이용해서 an 구하기
#bn의 n-1까지의 시그마값은 an-a1값과 동일
#bn의 일반항 : 4+(n-1)*2= 2n+2 /bn의 n-1까지의 시그마 : (n-1)(4+2(n-1)+2))/2
#시그마 값 : (n-1)(2n+4)/2 = (2n^+2n-4)/2 = n^+n-2
#따라서 n^+n-2 = an -3
#an = n^+n+1
valueAN = inputAN **2 + inputAN +1
print('an의 {}번째 항의 값 : {}'.format(inputAN, valueAN))
피보나치 수열
피보나치 수열 : an = a(n-2) + a(n-1)
ex) 1,1,2,3,5,8,13....
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valuePreN2=0
valuePreN1=0
n=1
while n <= inputN:
if n ==1 or n == 2:
valueN = 1
valuePreN2 = valueN
valuePreN1 = valueN
sumN += valueN
n +=1
else:
valueN = valuePreN2 + valuePreN1
valuePreN2 = valuePreN1
valuePreN1 = valueN
sumN += valueN
n +=1
print('{}번째 항의 값 : {}'.format(inputN,valueN))
print('{}번째 항까지의 합 : {}'.format(inputN,sumN))
팩토리얼
팩토리얼 : 1부터 양의 정수 n까지 정수를 모두 곱한것
ex) 3! = 1X2X3 = 6 but 0!은 1로 약속한다.
#for 반복문 사용
inputN = int(input('n 입력: '))
result = 1
for n in range(1, inputN +1):
result *=n
print('{}팩토리얼 : {}'.format(inputN,result))
#while 반복문 사용
result = 1
n=1
while n <= inputN:
result *= n
n +=1
print('{}팩토리얼 : {}'.format(inputN, result))
#재귀함수 이용
def factorialFun(n):
if n == 1: return 1
return n * factorialFun(n-1)
print('{}팩토리얼 : {}'.format(inputN,factorialFun(inputN)))
군수열
군수열 : 여러개의 항을 묶었을 때 규칙성을 가지는 수열
ex)1,1,2,1,2,3,1,2,3,4,1,2,3,4,5....
=> 1 / 1,2 / 1,2,3 / 1,2,3,4 / 1,2,3,4,5 / .....
50번째 항 찾기
1군은 1개 / 2군은 2개.... 군 갯수의 일반항은 n
(n^2 +n)/2 = n군까지의 갯수
n=9 이면 9군까지의 갯수는 45개
50번째 항은 9군 + 10군의 5번째항 = 5
inputN = int(input('n항 입력: '))
flag = True
n=1; nCnt = 1; searchN = 0 #nCnt는 전체항을 나타낸다.
while flag:
for i in range(1, (n+1)): #이 for문이 군 안에서의 반복
if i == n:
print('{} '.format(i),end='')
else:
print('{}, '.format(i), end='')
nCnt +=1
if(nCnt > inputN):
searchN = i
flag = False
break
print()
n+=1
print('{}항 : {}'.format(inputN,searchN))
inputN = int(input('n항 입력: '))
flag = True
n=1; nCnt=1; searchNC = 0; searchNP= 0
while flag:
for i in range(1, (n+1)):
if i == n :
print('{}/{}'.format(i, (n-i+1)), end='')
else:
print('{}/{}, '.format(i, (n - i + 1)), end='')
nCnt += 1
if (nCnt > inputN):
searchNC = i
searchNP = n -i +1
flag = False
break
print()
n+=1
print('{}항 : {}/{}'. format(inputN, searchNC, searchNP))