[기초 수학] 문제풀이

greta·2023년 5월 22일
0

1. 약수와 소수

import random

rNum = random.randint(100, 1000)
print(f'rNum: {rNum}')

for num in range(1, rNum+1):

    soinsuFlag = 0

    #약수
    if rNum % num == 0:
        print(f'[약수]: {num}')
        soinsuFlag += 1

    #소수
    if num != 1:
        flag = True
        for n in range(2, num):
            if num % n == 0:
                flag = False
                break
        if(flag):
            print(f'[소수]: {num}')
            soinsuFlag += 1

    #소인수
    if soinsuFlag >= 2:
        print(f'[소인수]: {num}')

2. 소인수와 소인수분해

import random

rNum = random.randint(100, 1000)
print(f'rNum: {rNum}')

soinsuList = []

n = 2
while n <= rNum:
    if rNum % n == 0:
        print(f'소인수: {n}')
        soinsuList.append(n)
        rNum /= n
    else:
        n += 1

print(f'soinsuList: {soinsuList}')

3. 최대공약수

import random

rNum1 = random.randint(100, 1000)
rNum2 = random.randint(100, 1000)

print(f'rNum1: {rNum1}')
print(f'rNum2: {rNum2}')

maxNum=0
for n in range(1, (min(rNum1, rNum2)+1)
    if rNum1 % n == 0 and rNum2 % n == 0:
        print(f'공약수: {n}'))
        maxNum = n
        
print(f'최대공약수: {maxNum}')

if maxNum == 1:
    print(f'{rNum1}과 {rNum2}는 서로소이다.')

4. 최소공배수

import random

rNum1 = random.randint(100, 1000)
rNum2 = random.randint(100, 1000)

print(f'rNum1: {rNum1}')
print(f'rNum2: {rNum2}')

maxNum = 0
for n in range(1, (min(rNum1, rNum2)+1)):
    if rNum1 % n == 0 and rNum2 % n == 0:
        print(f'공약수: {n}')
        maxNum = n

print(f'최대공약수: {maxNum}')

minNum = (rNum1 * rNum2) // maxNum
print(f'최소공배수: {minNum}')

5. 진법

dNum = int(input('10진수 입력: '))

print('2진수: {}'.format(bin(dNum)))
print('8진수: {}'.format(oct(dNum)))
print('16진수: {}'.format(hex(dNum)))

print('2진수(0b10101) -> 10진수({})'.format(int('0b10101', 2)))
print('8진수(0o135) -> 10진수({})'.format(int('0o135', 8)))
print('2진수(0x5f) -> 16진수({})'.format(int('0x5f', 16)))

print('2진수(0b10101) -> 8진수({})'.format(oct(0b10101)))
print('8진수(0o135) -> 16진수({})'.format(hex(0o135)))

6. 등차수열

inputA1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

valueN = 0; sumN = 0
n = 1
while n <= inputN:

    if n == 1:
        valueN = inputA1
        sumN += valueN
        print('{}번째 항의 값: {}'.format(n, valueN))
        print('{}번째 항까지의 합: {}'.format(n, sumN))
        n += 1
        continue

    valueN += inputD
    sumN += valueN
    print('{}번째 항의 값: {}'.format(n, valueN))
    print('{}번째 항까지의 합: {}'.format(n, sumN))
    n += 1

print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 합: {}'.format(inputN, sumN))

7. 등비수열

inputA1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))

valueN = 0; sumN = 0
n = 1

while n <= inputN:
    
    if n == 1:
        valueN = inputA1
        sumN += valueN
        print('{}번째 항의 값: {}'.format(n, valueN))
        print('{}번째 항까지의 합: {}'.format(n, sumN))
        n += 1
        continue

    valueN *= inputR
    sumN += valueN
    print('{}번째 항의 값: {}'.format(n, valueN))
    print('{}번째 항까지의 합: {}'.format(n, sumN))
    n += 1
    
print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 합: {}'.format(inputN, sumN))

8. 시그마


9. 계차수열

inputA1 = int(input('a1 입력: '))
inputN = int(input('an 입력: '))

valueN = ((3 * inputN ** 2) - (3 * inputN) + 4) / 2
print('an의 {}번째 항의 값: {}'.format(inputN, int(valueN)))

공식 활용하여 공식을 구함!

10. 피보나치수열

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

11. 팩토리얼

1) 반복문을 이용한 경우

def facFun1(n):

    fac = 1
    for n in range(1, n+1):
        fac *= n

    return fac

num = int(input('input Number: '))
print(f'{num}!: {facFun1(num)}')

def facFun2(n):
    
    if n == 1:
        return n
    
    return n * facFun2(n-1)

2) 파이썬 모듈을 이용한 경우

import math

num = int(input('input Number: '))
print(f'{num}!: {math.factorial(num)}')

12. 군 수열

flag = True

n = 1
nCnt = 1; searchNC = 0; searchNP = 0
sumN = 0
while flag:

    for i in range(1, n+1):
        print('{}/{}'.format(i, (n-i+1)), end=" ")

        sumN += i / (n-i+1)
        nCnt += 1

        if sumN > 100:
            searchNC = i
            searchNP = n - i + 1
            flag = False
            break

    print()
    n += 1

print('수열의 합이 최초 100을 초과하는 항, 값, 합: {}항, {}/{}, {}'.format(nCnt, searchNC, searchNP, round(sumN, 2)))

13. 순열

numN = int(input('numN: '))
numR = int(input('numR: '))
result = 1

for n in range(numN, numN-numR, -1):
    print('n: {}'.format(n))
    result = result * n
    
print('result: {}'.format(result))

fNum1 = int(input('factorial1: '))
result1 = 1

for n in range(fNum1, 0, -1):
    result1 *= n
print('result1: {}'.format(result1))

fNum2 = int(input('factorial2: '))
result2 = 1

for n in range(fNum2, 0, -1):
    result2 *= n
print('result2: {}'.format(result2))

print('모든 경우의 수: {}'.format(result1 * result2))

(2,4,7)을 묶어서 나머지 카드와의 순열을 구하면 5!
(2,4,5)의 순열을 구하면 3!
둘을 곱하면 원하는 결과

14. 조합

numN = int(input('numN: '))
numR = int(input('numR: '))

resultP = 1
resultR = 1
resultC = 1

for n in range(numN, (numN - numR), -1):
    resultP = resultP * n
print('resultP: {}'.format(resultP))

for n in range(numR, 0, -1):
    resultR = resultR * n
print('resultR: {}'.format(resultR))

resultC = int(resultP / resultR)
print('resultC: {}'.format(resultC))

(위에 이어서)
result = (1/resultC) * 100
print('{}%'.format(round(result, 2)))

15. 확률

def proFun():
  numN = int(input('numN: '))
  numR = int(input('numR: '))

  resultP = 1
  resultR = 1
  resultC = 1

  #순열(P)
  for n in range(numN, numN - numR, -1):
    resultP = resultP * n
  print('resultP: {}'.format(resultP))

  #R(f)
  for n in range(numR, 0, -1):
    resultR = resultR * n
  print('resultR: {}'.format(resultP))

  resultC = int(resultP / resultR)
  print('resultC: {}'.format(resultC))
  
  return resultC

sample = proFun()
print('sample: {}'.format(sample))

event1 = proFun()
print('event1: {}'.format(event1))

event2 = proFun()
print('event2: {}'.format(event2))

probability = (event1 * event2) / sample
print('probability: {}%'.format(round(probability*100, 2)))

sample 10C6
event1 6C3
event2 4C3

0개의 댓글