[11일차] 기초수학 5-6

하은·2023년 10월 31일
0

018. 시그마

- 시그마(∑)란?

- ∑란, 수열의 합을 나타내는 기호이다.

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

019. 계차수열

- 계차수열이란?

- 어떤 수열의 인접하는 두 항의 차로 이루어진 또 다른 수열

an: 0  3  8  15  24  35  48  63 : 등차x, 등비x
  bn: 3  5  7   9  11  13  15 : 등차(d=2)

{bn}은 {an}의 계차수열 : 두 항의 차이로 이루어진 수열. 다른 수열이 있어야 하고 차이를 뽑았을 때 등차면, 계차수열이다.

- 계차수열과 일반항

- 계차수열을 이용해서 수열{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의 일반항을 구해보자

{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


020. 계차수열(파이썬)

- 계차수열

- 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자

{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

021. 피보나치 수열

- 피보나치 수열이란?

- 세번째 항은 두번째 항과 첫번째 항을 더한 합이다.

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

022. 팩토리얼

- 팩토리얼이란?

- 1부터 양의 정수 n까지의 정수를 모두 곱한 것

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)))

023. 군수열

- 군수열이란?

- 여러개의 항을 묶었을 때 규칙성을 가지는 수열

*규칙성을 찾는 게 중요

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

실습) 다음 수열의 40번째 항의 값을 구해보자

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 )

024. 군수열(파이썬)

- 군수열

- 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자

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

실습) 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자

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

025. 순열

- 순열이란?

- n개에서 r개를 택해서 나열하는 경우의 수 *순서

{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

실습) 카드 4장을 일렬로 나열하되 삼각형과 사각형이 서로 이웃하도록 나열하는 경우의 수를 구하자

동그라미, 삼각형, 사각형, 오각형
-> 동그라미, (삼각형, 사각형), 오각형
3! = 6
2! = 2 (삼각형, 사각형 순서 바꿈)
= 12

0개의 댓글