0422 기초수학 3일차(~24)

박영선·2023년 4월 22일
0

등비수열

연속된 두항의 비가 일정한 수열
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))
profile
데이터분석 공부 시작했습니다

0개의 댓글