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}')
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}')
tempNum = 0
for s in soinsuList:
if tempNum != s:
print(f'{s}\'s count: {soinsuList.count(s)}')
tempNum = s
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)): # min(n1, n2) 는 n1, n2 중 작은 숫자를 뽑아주는 함수
if rNum1 % n == 0 and rNum2 % n == 0:
print(f'공약수: {n}')
maxNum = n
print(f'최대공약수: {maxNum}')
if maxNum == 1:
print(f'{rNum1}과 {rNum2}는 서로소이다.')
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,rNum1)+1)):
if rNum1 % n ==0 and rNum2 % n == 0:
print(f'공약수: {n}')
maxNum = n
print(f'최대공약수: {maxNum}')
minNum = (rNum1 * rNum2) // maxNum # 최소공배수
print(f'최소공배수: {minNum}')
# 10진수 -> 2, 8, 16 진수 변환
dNum = int(input('10진수 입력: '))
print('2진수: {}'.format(bin(dNum)))
print('8진수: {}'.format(oct(dNum)))
print('16진수: {}'.format(hex(dNum)))
# 2, 8, 16진수 -> 10진수 변환
print('2진수(0b10101) -> 10진수({})'.format(int('0b10101',2)))
print('8진수(0o135) -> 10진수({})'.format(int('0o135', 8)))
print('16진수(0x5f) -> 10진수({})'.format(int('0x5f', 16)))
# x 진수 -> x 진수 변환
print('2진수(0b10101) -> 8진수({})'.format(oct(0b10101)))
print('2진수(0b10101) -> 10진수({})'.format(int(0b10101)))
print('2진수(0b10101) -> 16진수({})'.format(hex(0b10101)))
print('8진수(0o675) -> 2진수({})'.format(bin(0o675)))
print('8진수(0o675) -> 10진수({})'.format(int(0o675)))
print('8진수(0o675) -> 16진수({})'.format(hex(0o675)))
print('16진수(0x45d) -> 2진수({})'.format(bin(0o675)))
print('16진수(0o45d) -> 8진수({})'.format(oct(0o675)))
print('16진수(0o45d) -> 10진수({})'.format(int(0o675)))
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))
# 공식 활용
# an = a1 + (n-1)d
inputA1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))
valueN = inputA1 + (inputN -1) * inputD
print('{}번째 항의 값: {}'.format(inputN, valueN))
# sn = n(a+an) / 2
sumN = inputN * (inputA1 + valueN) / 2
print('{}번째 항 까지의 합: {}'.format(inputN, int(sumN)))
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
valueN *= inputR
sumN += valueN
print('{}번째 항의 값: {}'.format(n, valueN))
print('{}번째 항까지의 합: {}'.format(n, sumN))
n += 1
print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 합: {}'.format(inputN, sumN))
# 공식
# an = a1 * r^(n-1)
inputA1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))
valueN = inputA1 * inputR ** (inputN-1)
print('{}번째 항의 값: {}'.format(inputN, valueN))
# sn = a1 * (1- r^n) / (1-r)
sumN = inputA1 * (1- (inputR ** inputN)) / (1-inputR)
print('{}번째 항까지의 합: {}'.format(inputN, int(sumN)))
# {2,4,8,16,32,64,128 ---- }
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, sumN))
n += 1
continue
valueN *= inputR
sumN += valueN
print('{}번째 항까지의 합: {}'.format(n, sumN))
n += 1
print('{}번째 항까지의 합: {}'.format(inputN, format(sumN, ',')))
# 공식 사용
# sn = a1 * (1-r^n) / (1-r)
sumN = inputA1 * (1- inputR ** inputN) / (1-inputR)
print('{}번째 항까지의 합: {}'.format(inputN, format(sumN, ',')))
# bn = 3, 6, 9 12 15 18 ---
# bn의 1항부터 (n-1) 항까지의 합은 an - a1
# bn = 3n
# bn의 1항부터 (n-1)까지의 총합 = 3n(n-1)/2 = an - a1
# an = 3n(n-1)+4/2
inputA1 = int(input('a1 입력: '))
inputN = int(input('an 입력: '))
valueN = ((3 * inputN ** 2)- (3 * inputN) + 4) / 2
print('an의 {}번째 항의 값: {}'.format(inputN, int(valueN)))
# an = a(n-2) + a(n-1)
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))
# 반복문
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)
num = int(input('input number: '))
print(f'{num}! : {facFun2(num)}')
# 파이썬 제공 모듈
import math
num = int(input('input number: '))
print(f'{num}! : {math.factorial(num)}')

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='') # 분자는 1씩 계속 커지니까 i, 분모는 1씩 계속 작아지니까 n-i+1
sumN += i / (n-i+1)
if sumN > 100:
searchNC = i
searchNP = n - i + 1
flag = False
break
nCnt += 1
print()
n += 1
print('수열의 합이 최초 100을 초과하는 항, 값, 합: {}항, {}/{}, {}'.format(nCnt, searchNC, searchNP, round(sumN, 2)))
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))
# 1부터 7까지 카드 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(fNum2, 0, -1):
result2 *= n
print('result2: {}'.format(result2))
print('모든 경우의 수: {}'.format(result1 * result2))
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1 # 순열
resultR = 1 # r!
resultC = 1 # 조합
for n in range(numN,(numN-numR),-1):
resultP *= n
print('resultP: {}'.format(resultP))
for n in range(numR, 0, -1):
resultR *= n
print('resultR: {}'.format(resultR))
resultC = int(resultP / resultR)
print('resultC: {}'.format(resultC))
# 1~7 중 3장을 선택했을때 3,4,5가 동시에 선택될 확률은?
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, (numN-numR), -1):
resultP *= n
print('resultP: {}'.format(resultP))
for n in range(numR, 0, -1):
resultR *= n
print('resultR: {}'.format(resultR))
resultC = int(resultP/resultR)
print('resultC: {}'.format(resultC))
result = (1/resultC) * 100
print('{}%'.format(round(result, 2)))
def proFun():
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
# 순열
for n in range(numN, (numN-numR), -1):
resultP *= n
print('resultP: {}'.format(resultP))
# r!
for n in range(numR, 0, -1):
resultR *= n
print('resultR: {}'.format(resultR))
# 조합
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)))
평소보다 집중이 잘 안되고 컨디션이 떨어진게 느껴지는 날... 가끔은 이런 날도 있으니 스스로를 너무 자책하지 말자고 생각하고 넘어가려 한다..!