230420_제로베이스데이터스쿨_03031~03045

김지태·2023년 4월 21일
0
post-thumbnail

03_031 약수와 소수

100 ~ 1000 사이 난수 발생, 약수, 소수, 소인수 출력하는 프로그램 만들기

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

03_032 소인수와 소인수분해

100부터 1000 사이의 난수 소인수분해, 각각 소인수에 대한 지수를 출력하는 프로그램 만들기 / 지수만 출력하는 것

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 = rNum / n

else:
n += 1

print(f'soinsuList: {soinsuList}')

tempNum = 0
for s in soinsuList:
if tempNum != s:
print(f'{s}\'s count: {soinsuList.count(s)}')
tempNum = s

03_033 최대공약수

100부터 1000 사이 2개 난수 출력, 두 수의 공약수, 최대공약수, 서로소 여부 출력하는 프로그램

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} = 서로소')

03_034 최소공배수

100 부터 1000 사이 난수 2개 발생, 최대공약수와 최소공배수 출력

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

print(f'{rNum1}, {rNum2}의 최소 공배수 = {int((rNum1*rNum2) / maxNum)}')

03_035 진법

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

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

print(int('0b10101', 2))
print(int('0o135', 8))
print(int('0x5f', 16))

03_036 등차수열

일반항 구하고 an과 Sn 구하는 프로그램 만들기

an = a1 + (n-1) * d

Sn = n * (a1 + an) / 2

inputA1 = int(input('a1: '))
inputD = int(input('D: '))
inputN = int(input('n: '))

valueN = 0 ; sumN = 0

n = 1

while n <= inputN:
if n ==1:
valueN = inputA1
sumN += valueN
print('{}th value: {}'.format(n, valueN))
print('{}th SUM: {}'.format(n, sumN))
n += 1
continue

valueN += inputD
sumN += valueN
print('{}th value: {}'.format(n, valueN))
print('{}th SUM: {}'.format(n, sumN))
n += 1

print('{}th value: {}'.format(inputN, valueN))
print('{}th SUM: {}'.format(inputN, sumN))

03_037 등비수열

일반항 구하고 an과 Sn 구하는 프로그램 만들기

inputA1 = int(input('a1: '))
inputR = int(input('R: '))
inputN = int(input('n: '))

valueN = 0 ; sumN = 0

n = 1

while n <= inputN:
if n ==1:
valueN = inputA1
sumN += valueN
print('{}th value: {}'.format(n, valueN))
print('{}th SUM: {}'.format(n, sumN))
n += 1
continue

valueN *= inputR
sumN += valueN
print('{}th value: {}'.format(n, valueN))
print('{}th SUM: {}'.format(n, sumN))
n += 1

print('{}th value: {}'.format(inputN, valueN))
print('{}th SUM: {}'.format(inputN, sumN))

an = a1 * r^(n-1)

Sn = a1 * (1 - r^n) / (1-r)

03_038 시그마

첫 날 두 톨, 둘 째날부터 하루 전의 2배에 달하는 쌀을 받는다 / 30일째 되는 날 받게 되는 쌀의 개수를 수열과 시그마로 나타내고 출력하라

2, 4, 8, 16, 32, 64, 128, 256, ...

inputA1 = int(input('a1: '))
inputR = int(input('R: '))
inputN = int(input('n: '))

valueN = 0 ; sumN = 0

n = 1

while n <= inputN:
if n ==1:
valueN = inputA1
sumN += valueN
print('{}th value: {}'.format(n, valueN))
print('{}th SUM: {}'.format(n, sumN))
n += 1
continue

valueN *= inputR
sumN += valueN
print('{}th value: {}'.format(n, valueN))
print('{}th SUM: {}'.format(n, sumN))
n += 1

print('{}th value: {}'.format(inputN, valueN))
print('{}th SUM: {}'.format(inputN, sumN))

03_039 계차수열

2, 5, 11, 20, 32, 47, 65, 86, 110, 137, 167

위 수열의 일반항을 구하라 / 계차수열, 차이가 등차수열임.

an = (3n^2 - 2n + 4) / 2

inputA1 = int(input('a1: '))
inputN = int(input('n: '))

valueN = ((3 inputN **2) - (3inputN) + 4) / 2
print('{}th value: {}'.format(inputN, valueN))

03_040 피보나치 수열

1, 1, 2, 3, 5, 8, 13, 21, 14, 55, 89, 144, ...

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('{}th value: {}'.format(inputN, valueN))
print('{}th SUM: {}'.format(inputN, sumN))

03_041 팩토리얼

반복문

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

return fac
num = int(input('N? : '))
print(f'{num}!: {facFun1(num)}')

재귀함수

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

return n * facFun2(n-1)

num = int(input('N? : '))
print(f'{num}!: {facFun2(num)}')

math module

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

03_042 군 수열

수열의 합이 100 초과하는 n 번째 항과 n을 출력하는 프로그램 만들기

1/1 | 1/2 2/1 | 1/3 2/2 3/1 | 1/4 2/3 3/2 4/1 | 1/5 2/4 ...

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(nCnt, searchNC, searchNP, sumN)

03_043 순열

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('{}P{} = {}'.format(numN, numR, result))

카드 1부터 7까지 한 장씩 있는데, 2, 4, 7 카드가 서로 이웃하도록 나열하는 모든 경우의 수를 구하자.

5! * 3!

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(fNum1, 0, -1):
result2 *= n
print('result1: {}'.format(result2))

print('정답 = {}'.format(result1, result2))

03_044 조합

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

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

print('{}P{} = {}'.format(numN, numR, resultP))

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

print('R! = {}'.format(numN, numR, resultR))

resultC = int(resultP / resultR)

print(f'조합 결과 {numN}C{numR}: {resultC}')

03_045 확률

박스에 꽝이 적힌 종이 6장, 선물이 적힌 종이 4장 있는데, 꽝 3장과 선물 3장을 뽑을 확률 출력하자

10 C 6 전체 확률

6 C 3 꽝 3장

4 C 3 선물 3장

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

resultP = 1
resultR = 1
resultC = 1

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

print('{}P{} = {}'.format(numN, numR, resultP))

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

print('R! = {}'.format(numN, numR, resultR))

#조합
resultC = int(resultP / resultR)

print(f'조합 결과 {numN}C{numR}: {resultC}')

return resultC

sample = proFun()
print(sample)

profile
데이터 분석가

0개의 댓글