기초 수학(2)

이상해씨·2021년 9월 25일
0
post-custom-banner

◾수열

  • 수열 : 규칙성을 가지고 나열되어 있는 수들
    • 2 4 6 8 10 12 14 16... x
      • a1 a2 a3... an
      • an = 2*n
    • 3 5 7 9 11 13 15 17 ... x
      • a1 a2 a3 ... an
      • an = 2*n + 1
    • 1 3 5 7 9 11 13 15 ... x
      • a1 a2 a3 ... an
      • an = 2*n - 1
  • 항들의 합과 항의 관계 : 특정항은 특정항까지의 합에서 특정항 이전의 항까지의 합과 같다.
    • 3 5 7 9 ... X
      • an = 2*n + 1
      • 수열합 sn = a1 + a2 + ... + ... + an
      • => an = sn - s(n-1)

1. 등차수열

  • 등차수열 : 연속된 두 항의 차이가 일정한 수열
    • 2 4 6 8 10 12 14 16
    • 두 항의 차이가 2인 등차 수열
    • 공차(d) : 등차 수열에서 증가하는 값
  • 등차 수열과 일반항
    • 등차 수열 규칙성을 이용하여 일반항을 구할 수 있다.
      • 2 4 6 8 10 12 14 16
      • a1 ~ an
      • a2 - a1 = 2, a3 - a2 = 2, ... an - an-1 = 2
      • an - a1 = (n-1) * 2
      • an = a1 + (n-1) 2 = 2 n
    • 일반항 : an = a1 + (n-1) * d
  • 등차 중항 : 연속된 세 항에서 가운데 항
    • an-1 + an+1 = an * 2
    • an = (an-1 + an+1) / 2
# 입력 : 첫째항, 공차, 값을 구할 항
# 출력 : 값을 구할 항
# 반복 사용
valueN = 0;
n = 1
while True:
    if n == 1:
        valueN = inputN1
        print('{}번째 항의 값 : {}'.format(n, valueN))
        n += 1
        continue
    valueN += inputD
    print('{}번째 항의 값 : {}'.format(n, valueN))
    if n == inputN:
        break
    n += 1
# 공식 사용
valueN = inputN1 + (inputN-1) * inputD
  • 등차 수열의 합 : 규칙성을 이용해서 모든 항들의 총합을 구할 수 있다
    • sn = a1 + a2 + ... + an
    • sn = an + an-1 + ... + a1
    • a1 + an = a1 + a1 + (n-1)d = 2a1 + (n-1)d
    • a2 + an-1 = a1 + d + a1 + (n-1)d - d = 2a1 + (n-1)d
    • 2sn = n(2a1 + (n-1)d)
    • sn = n(a1+ an) / 2
# 입력 : 첫째항, 공차, 끝 항
# 출력 : 첫째항부터 끝 항까지의 합

# 반복 사용
valueN = 0
sumN = 0  # 합계 변수
n = 1
while True:
    if n == 1:
        valueN = inputN1
        sumN += valueN
        print('{}번째 항까지의 합 : {}'.format(n, sumN))
        n += 1
        continue
    valueN += inputD
    sumN += valueN
    print('{}번째 항까지의 합 : {}'.format(n, sumN))
    if n == inputN:
        break
    n += 1

# 공식 사용
valueN = int(inputN1 + (inputN-1) * inputD)
# 합계 변수
sumN = int(inputN * (inputN1 + valueN) / 2) 

2. 등비수열

  • 등비수열 : 연속된 두 항의 비가 일정한 수열
    • 2 6 18 54 162 486 1458 4374
      • 두 항의 비가 3인 등비수열
      • 공비(r) : 등비수열에서 곱해지는 값
  • 등비 수열과 일반항
    • 2 6 18 54 162 486 1458 4374
    • a2 / a1 = 3, a3 / a2 = 3, ... , an / an-1 = 3
    • an / a1 = 3^(n-1)
    • an = a1 * 3^(n-1)
    • 일반항 : an = a1 * r^(n-1)
  • 등비 중항 : 연속된 세 항에서 가운데 항
    • 2 6 18 54 162 486 1458
    • an-1 * an+1 = an^2
# 입력 : 첫째항, 공차, 값을 구할 항
# 출력 : 값을 구할 항

# 반복 사용
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))
    if n == inputN:
        break
    n += 1

# 수식 사용
valueN = inputN1 * (inputR ** inputN-1)
  • 등비 수열의 합
    • sn = (a1 r^0) + (a1 r^1) + ... + (a1 * r^(n-1))
    • rsn = (a1 r^1) + (a1 r^2) + ... + (a1 r^n)
    • (1-r)sn = (a1 r^0) - (a1 r^n)
    • sn = ((a1 r^0) - (a1 r^n)) / (1-r) = a1 * (1 - r^n) / (1-r)
# 입력 : 첫째항, 공차, 끝 항
# 출력 : 첫째항부터 끝 항까지의 합

# 반복 사용
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))
    if n == inputN:
        break
    n += 1

# 수식 사용
# 합계 변수
sumN = inputN1 * (1 - (inputR ** inputN)) / (1 - inputR)

3. 시그마

  • 시그마(∑) : 수열의 합을 나타내는 기호
    • sn = {a1 + a2 + ... + an}
    • 등비수열
    • n은 끝을 k=1은 시작을 의미한다.

◾계차수열

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

    • 수열 an : 0 3 8 15 24 35 48 63
    • 계차 수열 bn : 3 5 7 9 11 13 15 => 공차가 2인 등차 수열
  • 계차 수열과 일반항

    • 계차 수열을 이용해 수열 an의 일반항을 구할 수 있다.
    • b1= a2 - a1, b2 = a3 - a2, ..., bn-1 = an - a(n-1)
    • bn = 2 * n + 1
  • 일반항 bn = b1 + (n-1)d

  • 일반항 an = (n-1)(b1 + (bn-1)) = (n-1)(2b1 + (n-2)d)

# 입력 : 첫째항, 구할 항, 계차수열의 첫째항, 계차수열의 공차
# 출력: 구할 항의 값
# on = 3, 7, 13, 21, 31, 43, 57
#       4  6   8   10  12  14

# 반복
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))
    if n == inputAN:
        break
    n += 1

# 수식 사용
# bn = 2n + 2
# an = a1 + (n-1)(b1 + 2n)/2
# an = 3 + (n-1)(2n+4)/2 = 3 + (n-1)(n+2) = n^2 +n +1
valueAN = inputAN ** 2 + inputAN + 1

◾피보나치 수열

  • 피보나치 수열 : a1 = 1, a2 = 1이고 n > 2일 때, an = an-2 + an-1인 수열을 말한다.
    • 1 1 2 3 5 8 13 21 ...
# 입력 : 값을 구할 항
# 출력 : 피보나치 수열 값 numN
num1 = 1
num2 = 1

if inputN == 1 or inputN == 2:
    numN = 1
else:
    n = 3
    while n <= inputN:
        numN = num1 + num2
        num1, num2 = num2, numN
        if n == inputN :
            break
        n += 1

◾팩토리얼

  • 팩토리얼(!) : 1부터 양의 정수 n까지의 정수를 모두 곱한 것
    • 0! : 1 = 1 (0!은 1로 약속)
    • 1! : 1 = 1
    • 2! : 1 * 2 = 2
    • 3! : 1 2 3 = 6
    • n! : 1 2 3 ... n
# 반복문
result = 1
for n in range(1, inputN+1):
    result *= n
    
# 재귀함수
def factorialFunc(n):
    if n == 1 or n == 0 : return 1
    else : return n * factorialFunc(n-1)
result = factorialFunc(inputN)

# math 모듈
import math
result = math.factorial(inputN)

◾군수열

  • 군수열 : 여러 개의 항을 묶었을 때 규칙성을 가지는 수열
    • 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), ...
    • 군 : 1군, 2군, 3군, 4군, 5군
    • 항의 개수 : 1개, 2개, 3개, 4개, 5개, ...
    • 각 군은 첫째 항 1, d = 1인 등차수열을 이룬다
    • 군의 항 개수 일반항 : an = n
    • 군의 항 개수 Sn : Sn = (n^2 + n)/2
      • 50 번째 항
        • => S9 = (9*9 + 9)/2 = 45
        • => 9군 + 10군의 5항 = 50 번째 항
        • => 10군의 5 번째항 : 5
# 입력 : 값을 구할 항
# 출력 : 군수열 값
# 군수열 : 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 ...

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

        if nCnt == inputN:
            searchN = i
            flag = False
            break
        nCnt += 1
    print()
    n += 1
profile
후라이드 치킨
post-custom-banner

0개의 댓글