2 6 18 54 162
공비(r) : 3
sn = {a1 + a2 + a3 + .. + an}
k에 1부터 n항까지 대입하면서 합을 구하는 것
#an = a1 +(n-1)d
#등차수열의 합: sn = n(a1 + an) / 2
inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valueN = inputN1 + (inputN - 1) * inputD
sumN = inputN * (inputN1 + valueN) / 2
print('{}번째 항까지의 합: {}'.format(inputN, int(sumN)))
-->
a1 입력: 2
공차 입력: 2
n 입력: 10
10번째 항까지의 합: 110
#sn = a1 * (1-(r^n) / (1-r)
inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
sumN = inputN1 * (1 - (inputR ** inputN)) / (1 - inputR)
print('{}번째 항까지의 합: {}'.format(inputN, int(sumN)))
-->
a1 입력: 2
공비 입력: 3
n 입력: 8
8번째 항까지의 합: 6560
an: 0 3 8 15 24 35 48 63 : 등차x, 등비x
bn: 3 5 7 9 11 13 15 : 등차(d=2)
{bn}은 {an}의 계차수열 : 두 항의 차이로 이루어진 수열. 다른 수열이 있어야 하고 차이를 뽑았을 때 등차면, 계차수열이다.
an: 0 3 8 15 24 35 48 63 : 등차x, 등비x
bn: 3 5 7 9 11 13 15 : 등차(d=2)
b1 = a2 - a1
b2 = a3 - a2
b3 = a4 - a3
...
bn-1 = an - an-1
->
->
<등차수열>
an = a1 + (n-1)*d
sn = n(a1 + an)/2
bn의 일반항 = 3 +(k-1)2 = 2k + 1
sn = n-1까지의 항이니까, (k-1) (3 + 2(k-1) +1) /2
= (k-1) (2k + 2) / 2
= k^2 - 1 = an - a1
( a1 = 0 )
= n^2 - 1 = an
{an} = {3, 7, 13, 21, 31, 43, 57}
{bn} = {4, 6, 8, 10, 12, 14} = 등차수열
b1 = a2 - a1
b2 = a3 - a2
...
bn-1 = an - an-1
bn = 4 + (n-1)*2 = 2n + 2
sn = (n-1) (4 + 2(n-1) + 2)
= (n-1)(2n + 4) / 2
= n^ +n - 2 = an - a1(3)
= n^ + n + 1 = an
{an} = {3, 7, 13, 21, 31, 43, 57}
{bn} = {4, 6, 8, 10, 12, 14}
#an = {3, 7, 13, 21, 41, 43, 57}
#bn = {4, 6, 8, 10, 12, 14} a = 4, d = 2
inputAn1= int(input('a1 입력: '))
inputAn= int(input('an 입력: '))
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))
-->
a1 입력: 3
an 입력: 7
b1 입력: 4
bn 공차 입력: 2
an의 1번째 항의 값: 3
bn의 1번째 항의 값: 4
an의 2번째 항의 값: 7
bn의 2번째 항의 값: 6
an의 3번째 항의 값: 13
bn의 3번째 항의 값: 8
an의 4번째 항의 값: 21
bn의 4번째 항의 값: 10
an의 5번째 항의 값: 31
bn의 5번째 항의 값: 12
an의 6번째 항의 값: 43
bn의 6번째 항의 값: 14
an의 7번째 항의 값: 57
bn의 7번째 항의 값: 16
또는 공식 계산해서 할 경우,
n^2 + n + 1 = an
valueAn = inputAn ** 2 + inputAn + 1
print('an의 {}번째 항의 값: {}'.format(inputAn, valueAn))
-->
a1 입력: 3
an 입력: 7
an의 7번째 항의 값: 57
1, 1, 2, 3, 5, 8, 13, 21
--> a1 = 1, a2 = 1이고, n>2일때
an = an-2 + an-1 이다
예) 두달이 지나면 토끼 암수 한쌍이, 암수 한쌍을
낳음.
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valuePreN2 = 0
valuePreN1 = 0
n = 1
while n <= inputN:
if n == 1 or n == 2: #1, 2번째
valueN = 1
valuePreN1 = valueN
valuePreN2 = 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))
-->
n 입력: 3
3번째 항의 값: 2
3번째 항까지의 값: 4
0! -> 1 = 1 # 0!은 1로 약속한다
1! -> 1 = 1
2! -> 1 * 2 = 2
3! -> 1 * 2 * 3 = 6
4! -> 1 * 2 * 3 * 4 = 24
def(함수를 정의) 함수이름(n; input data):
if ~ 작업
return ~ 호출한 곳으로 반환
재귀함수: 자신을 다시 호출하는 함수
inputN = int(input('n 입력: '))
# 1. 반복문
result = 1 #변수지정. 곱하기니까 초기값 1로
for n in range(1, (inputN + 1)):
result *= n
print('{}팩토리얼: {}'.format(inputN,
result))
# 2. 재귀함수
def factorialFun(num):
if num == 1: return 1
return num * factorialFun(num - 1)
print('{}팩토리얼: {}'.format(inputN, factorialFun(inputN)))
# 3. 모듈(팩토리얼 함수)
import math
print('{}팩토리얼: {}'.format(inputN, math.factorial(inputN)))
*규칙성을 찾는 게 중요
1, 1, 2, 1, 2, 3, 1, 2, 3, 4, ...
1군| 2군 | 3군 | 4군
1개| 2개 | 3개 | 4개 - 항 개수 = 등차
an = a1 + (n-1)d
an = n (군수열에서는)
sn = n(a1 + an) / 2
sn = n(1 + n) / 2 = n^2 + n / 2
50번째항? if 9군까지 계산해보고자하면,
sn = 81 + 9 / 2 = 45
= 9군 + 10군의 5항 = 5
1 1 2 1 2 3 1 2 3 4
- ,- , - , - , - , - , - , - , - , - , ...
1 2 1 3 2 1 4 3 2 1
an = n
sn = n^2 + n / 2
8군이라 쳤을 때, 64 + 8 / 2 = 36
= 8군 + 9군의 4항 ( 4 / 6 )
1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5 ...
군으로 묶으니 항의 개수가 a1 = 1, d = 1인 등차수열
inputN = int(input('n항 입력: '))
flag = True
n = 1 #군
nCnt = 1 #군의 개수
searchN = 0 #찾고자 하는 항의 값
while flag:
#군 안에서의 반복
for i in range(1, (n + 1)):
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))
-->
n항 입력: 15
1
1, 2
1, 2, 3
1, 2, 3, 4
1, 2, 3, 4, 5
15항: 5
1 1 2 1 2 3 1 2 3 4
- ,- , - , - , - , - , - , - , - , - , ...
1 2 1 3 2 1 4 3 2 1
분자값 따로, 분모값 따로 구하면 됨.
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))
-->
n항 입력: 5
1/1
1/2 2/1
1/3 2/2
5항: 2/2
{1, 2, 3, 4}
- 2 - 1 - 1
1 - 3 2 - 2 3 - 2
- 4 - 3 - 3
총 12가지 경우의 수
* 순서있게 나열 했을 경우의 모든 경우의 수
4P2 = 4*3(4-2+1) = 12개
nPr = n(n-1)(n-2)...(n-r+1). (단, 0<r<=n)
n(n-1)(n-2)...(n-r+1) (n-r)(n-r-1)(n-r-2)...3x2x1
-
(n-r)(n-r-1)(n-r-2)...3x2x1
= n!
-
(n-r)!
8P3 (8-3+1)
= 8*7*6 = 336
= 8! / 5! = 8*7*6 = 336
7P5 (7-5+1)
= 7*6*5*4*3 = 2520
= 7! / 2! = 7*6*5*4*3 = 2520
동그라미, 삼각형, 사각형, 오각형
-> 동그라미, (삼각형, 사각형), 오각형
3! = 6
2! = 2 (삼각형, 사각형 순서 바꿈)
= 12