def)약수 : 어떤 수는 나누어떨어지게 하는 수
inputNum = int(input("정수 입력"))
for number in range(1, (inputNum + 1)):
if num % number == 0:
print(f'{inputNum}의 약수{number}')
def)소수 : 1과 자기자신만을 약수로 가지는 수, 단 1은 제외
inputNum = int(input("정수 입력"))
for number in range(2, (inputNum+1)):
flag = True
for n in range(2, number):
if number % n ==0:
flag = False
break
if(flag):
print(f"{number} : 소수")
elsE:
print(f'{number} : 합성수')
소인수 : 약수(인수) 중에서 소수인 수
소인수분해 : 1보다 큰 정수를 소인수의 곱으로 나타낸 것
inputNumber = int(input("1보다 큰 정수 입력 : "))
n = 2
while n<= inputNumber:
if inputNumber % n ==0:
prtin('소인수 {}'.format(n))
inputNumber /= n
else:
n += 1
72에 어떤 수 x를 곱했을 때 이 수는 y의 제곱이 된다.
x의 최소값을 구하면?
searchNumber = []
n = 2
while n<= inputNumber:
if inputNumber % n ==0:
prtin('소인수 {}'.format(n))
if searchNubers.count(n) == 0:
searchNumbers.append(n)
elif searchNubers.count(n) == 1:
searchNumbers.remove(n) # 이렇게 동작시켜 최종적으로 남는애를 한 번 고밯면 됨
else:
n += 1
최대공약수(gcd) : 공통된 약수 중 가장 큰 수, 소인수분해를 이용하면 최대공약수 및 공약수를 구할 수 있다.
공통인 소인수의 거듭제곱에서 지수가 작은 수를 모두 곱한다.ㅈ
좀 더 편리하게 구하는 방법 : 소수로 나눗셈하기 -> 일반적으로 최대공약수 구할 때 사용하는 방법
num1 = int(input('1보다 큰 정수 입력'))
num2 = int(input('1보다 큰 정수 입력'))
maxNum = 0
for i in range(1, (num1 + 1)):
if num1 % i ==0 and num2 % i ==0:
print('공약수 : {}'.format(i))
maxNum = i
print(f'최대 공약수 : {maxNum}')
num1 = int(input('1보다 큰 정수 입력'))
num2 = int(input('1보다 큰 정수 입력'))
temp1 = num1; temp2 = num2
while temp2 > 0:
temp = temp2
temp2 =temp1 % temp2
temp1 = temp
print(f'{num1}, {num2}의 최대공약수 {num}')
for n in range(1, (temp1 + 1)):
if temp1 % n ==0:
print(f"{num1}, {num2}의 공약수 {n}")
공배수 : 두 개 이상의 수에서 공통된 배수
최소공배수(lcm) : 공배수 중 가장 작은 수를 최소공배수라고 한다.
소인수분해를 이용해 최소공배수 및 공배수를 구할 수 있다.
공통인 소인수의 거듭제곱에서 지수가 크고 공통아닌 수를 모두 곱한다.
num1 = int(input('1보다 큰 정수 입력'))
num2 = int(input('1보다 큰 정수 입력'))
maxNum = 0
for i in range(1, (num1 + 1)):
if num1 % i ==0 and num2 % i ==0:
print('공약수 : {}'.format(i))
maxNum = i
print(f'최대 공약수 : {maxNum}')
minNum= (num1 * num2) // maxNum
print('최소공배수: {}'.format(minNum))
# 세 개의 수를 입력해 최소 공배수를 구하기
num1 = int(input('1보다 큰 정수 입력'))
num2 = int(input('1보다 큰 정수 입력'))
num3 = int(input('1보다 큰 정수 입력'))
maxNum = 0
for i in range(1, (num1 + 1)):
if num1 % i ==0 and num2 % i ==0:
print('공약수 : {}'.format(i))
maxNum = i
print(f'최대 공약수 : {maxNum}')
minNum= (num1 * num2) // maxNum
print('최소공배수: {}'.format(minNum))
newNum = minNum
for i in range(1, (newNum +1)):
if newNum % i ==0 and num3 % i ==0:
maxNum = i
minNum = (newNum * num3) // maxNum
prtin(f"{num1}, {num2}, {num3}의 최소공배수 : {minNum}")
진법 : 특정 숫자 몇 개를 사용하여 수를 표시하는 방법
ex) 16진법은 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F를 사용
2진수 -> 8진수 변환 : 뒤에서부터 3자리씩 구분하고 빈 자리는 0으로 채운다. 2진수를 10진수로 변환한거 그대로 쓰면 ㅇㅋ .
ex) 1010100 -> 001/010/100(세글자씩 끊음) -> 124
2진수 -> 16진수 변환 : 뒤에서부터 4자리씩 구분해서 하면 됨.
10진수 -> 2,8,16 진수 변환
format 함수를 사용. bin(), oct(), heX() 사용
환한 결과는 str 타입, b,o,x에
을 붙여서 사용하면 0b 처럼 진수를 의미하는 내용도 같이 출력 됨
format(bin(dNum))format(nNum, '#b')format(nNum,'b')
.format(int(''진수''),형태)
#예시
print("2진수 (0b11110) -> 10진수
({})".format(int('ob1110', 2)))
print("2진수(0b1110) -> 8진수({})".format(oct(0b1110)))
수열 : 규칙성을 가지고 나열되어 있는 수들
등차수열 : 연속된 두 항의 차이가 일정한 수열
아래는 등차수열의 일반항이다.
등차 중항 : 연속된 세 항에서 가운데 항
아래와 같은 성질을 갖는다.
등차 수열의 합은 아래와 같다
# n번쨰 항의 값을 출력하는 프로그램
inputN1 = int(input("a1 입력 :"))
inputD = int(input("공차 입력 :"))
inputN = int(input("n 입력 :"))
valueN = 0
n = 1
while n <= inputN :
if n==1:
valueN = inputN1
print(f'{n}번째 항의 값 {valueN}')
n += 1
continue
valueN += inputD
print(f'{n}번째 항의 값 :{}')
n += 1
print(f'{inputN}번쨰 항의 값 : {valueN}')
valueN = inputN1 + (inputN-1) * inputD
#다음 수열을 보고 n번째 항까지의 합을 출력
inputN1 = int(input("a1 입력 :"))
inputD = int(input("공차 입력 :"))
inputN = int(input("n 입력 :"))
valueN = 0
sumN = 0
n = 1
while n <= inputN :
if n==1:
valueN = inputN1
sumN = valueN
print(f'{n}번째 항의 값 {valueN}')
n += 1
continue
valueN += inputD
sumN += valueN
print(f"{n}번째 항까지의 합 : {sumN}")
n += 1
print(f"{inputN} 번째 항까지의 값 {sumN}")
valueN = inputN1 * (inputN - 1 ) * inputD
sumN = inputN * (inputN1 + valueN) / 2
등비수열 : 연속된 두 항의 비가 일정한 수열
# n 번쨰 항의 값을 출력하는 프로그램
inputN1 = int(input("a1 입력 :"))
inputR = int(input("공비 입력 : "))
inputN = int(input("n 입력 : "))
valueN = 0
n = 1
whilte n <= inputN:
if n==1:
valueN = inputN1
print(f"{n}번쨰 항의 값 : {valueN}")
n += 1
continue
valueN += inputR
print(f"{n}번쨰 항의 값 : {valueN}")
n += 1
print(f"{inputN}번째 항의 값 {valueN}")
#일반항 공식 이용
valueN = inputN1 * (inputR ** (inputN-1))
print(f"{inputN}번째 항의 값 : {valueN}")
#S_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(f"{n}번째 항까지의 합 : {sumN}")
n += 1
continue
valueN *= inputR
sumN += valueN
print(f"{n}번째 항까지의 합 : {sumN}")
n += 1
print(f"{unputN}번쨰 항까지의 합 : {sumN}")
sumN = inputN1 * (1 - (inputR ** inputN)) / (1 - inputR)
sigma : 수열의 합을 나타내는 기호
계차 수열 : 어떤 수열의 인접하는 두 항의 차로 이루어진 또 다른 수열
inputAN1 = int(input("a1 입력"))
inputAN = int(input("an 입력"))
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(f"an의 {n}번째 항의 값{valueAN}")
print(f"bn의 {n}번째 항의 값{valueBN}")
n += 1
피보나치 수열 : 처음 두 항을 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
sumN += valueN
n += 1
print(f"{inputN}번째의 값 : {valueN}")
print(f"{inputN}번째 항까지의 합 : {sumN}")
팩토리얼 : 1부터 양의 정수 n까지의 모든 정수를 곱한 것, 단 0!은 1로 정의한다.
# 반복문
result = 1
for n in range(1, inputN +1):
result *= n
print(f"{inputN} 팩토리얼 : {result}")
result = 1
n = 1
while n<= inputN:
result *= n
n += 1
print(f"{inputN} 팩토리얼 : {result}")
#재귀 함수
def factorialFun(n):
if n==1 :
return 1
return n * factorialFun(n - 1)
print(f"{inputN} 팩토리얼 : {factorialFun(inputN)}")
#모듈
import math
math.factorial(n)
군수열 : 여러 개의 항을 묶었을 때 규칙성을 가지는 수열
inputN = int(input("n항 입력 : "))
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 = '')
nCnt += 1
if(nCnt > inputN):
searchN = i
flag = False
break
print()
n += 1
print(f"{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):
searchN = i
searchNP = n - i +1
flag = False
break
print()
n += 1
print(f"{inputN}항 : {searchN}/{searchNP}")
순열 : n개에서 r개를 택하여 나열하는 경우의 수
numN = int(input('N 입력'))
numR = int(input('R 입력'))
result = 1
for n in range(numN, (numN-numR), -1):
print(f" n : {n}")
result = result * n
print(f"result : {result}")
원순열 : 시작과 끝의 구분이 없는 순열 (n-1)! 으로 계산
조합 : 순서 상관없이 n개 에서 r개를 택하는 경우의 수
numN = int(input('N 입력'))
numR = int(input('R 입력'))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, (numN-numR), -1):
print(f"n : {n}")
resultP = resultP * n
print("resultP : {resultP}")
for n in range(numR, 0, -1):
print("n : {n}")
resultR = resultR * n
print("resultR : {resultR}")
resultC = int(resultP / resultR)
print(f"resultC : {resultC}")
확률 : 특정 사건이 일어날 수 있는 경우의 수
모든 사건 : 표본 공간, 특정 사건 : 사건