Part 02. 수학
- 약수와 소수
- 소인수와 소인수분해
- 최대공약수
- 최소공배수
오늘 공부 요약짤...🥲

→ 어떤 수를 나누어 떨어지게 하는 수
inputNum = int(input('0보다 큰 정수 입력 :'))
for num in range(1, (inputNum+1)) :
if inputNum % num == 0 :
print('{}의 약수 : {}'. format(inputNum, num))
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (for ~ in 반복문) 1부터 inputNum까지 반복해라
- (if 조건문) 만약 inputNum을 num으로 나누고 난 나머지가 0이라면
- (출력 코드) inputNum의 약수 : num. 이라는 문구 출력
→ 1과 자신만을 약수로 가지는 수 (단, 1은 제외)
inputNum = int(input('0보다 큰 정수 입력 :'))
for num in range(2, (inputNum+1)) :
flag = True
for n in range(2, num) :
if num % n == 0 :
flag = False
break
if (flag) :
print(f'{num} : 소수!!')
else :
print(f'{num} : 합성수!!')
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (for ~ in 반복문) 2부터 inputNum까지 반복해라
- (반복문 내 변수 선언) flag는 참이다
- (중첩 반복문, for ~ in 반복문) 2부터 num까지 반복해라
- (if 조건문) num을 n으로 나눈 나머지가 0이라면
- flag는 거짓이되고 (반복문을) break 한다
- (if else 조건문) 만약 flag가 참이면
- (출력코드) num : 소수!! 라는 문구 출력
- flag가 거짓이면
- (출력 코드) num : 합성수!! 라는 문구 출력
→ 약수(인수) 중에서 소수인 숫자를 소인수라고 한다.
→ 소수와 인수의 합쳐진 말
inputNum = int(input('1보다 큰 정수 입력 : '))
n = 2
while n <= inputNum :
if inputNum % n == 0 :
print(f'소인수 : {n}')
inputNum /= n
else :
n += 1
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (변수 선언) n = 2
- (while 반복문) n이 inputNum보다 작거나 같을 때까지 반복해라
- (if else 조건문) 만약 inputNum을 n으로 나눈 나머지가 0이라면
- (출력 코드) 소인수 : n. 이라고 출력
- inputNum에 n을 나눈 값을 inputNum으로 설정, while 반복문 재시작
- (else) inputNum을 n으로 나눈 나머지가 0이 아닐 때 n에 1을 더해서 while 반복문 재시작
→ 1보다 큰 정수를 소인수의 곱으로 나타낸 것을 소인수분해라고 한다.
inputNum = int(input('1보다 큰 정수 입력 : '))
n = 2
numList = []
while n <= inputNum :
if inputNum % n == 0 :
print(f'소인수 : {n}')
if numList.count(n) == 0 :
numList.append(n)
elif numList.count(n) == 1 :
numList.remove(n)
inputNum /= n
else :
n += 1
print(numList)
⭐
- (변수 선언) 사용자에게 입력받는 정수를 inputNum이라는 변수로 저장
- (변수 선언) n = 2
- (리스트 선언) numList 초기화
- (while 반복문) n이 inputNum보다 작거나 같을 때까지 반복해라
- (if else 조건문) 만약 inputNum을 n으로 나눈 나머지가 0이라면
- (출력 코드) 소인수 : n. 이라고 출력
- (중첩 조건문, if elif) numList 속 요소 개수가 0이라면
- numList로 n을 수집해라
- (elif) numList 속 요소 개수가 1이라면
- numList에 있는 n을 삭제해라
- inputNum에 n을 나눈 값을 inputNum으로 설정, while 반복문 재시작
- (else) inputNum을 n으로 나눈 나머지가 0이 아닐 때 n에 1을 더해서 while 반복문 재시작
→ (공약수) 두 개 이상의 수에서 공통된 약수를 공약수라고 한다.
→ (최대공약수) 공약수 중 가장 큰 수를 최대공약수라고 한다.
num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0
for n in range(1, num1 +1) :
if num1 % n == 0 and num2 % n == 0 :
print (f'공약수 : {n}')
maxNum = n
print(f'최대 공약수 : {maxNum}')
⭐
- (변수 선언) 사용자에게 입력받은 정수를 num1로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num2로 선언한다
- (변수 선언) maxNum은 0으로 선언한다
- (for ~ in 반복문) 1부터 num1회까지 반복해라
- (if 조건문) num1을 n으로 나눈 나머지가 0이고 num2를 n으로 나눈 나머지가 0이라면
- (출력 코드) 공약수 : n. 이라는 문구 출력
- maxNum은 n이 된다
- (출력 코드) 최대공약수 : maxNum. 이라는 문구 출력
→ x(작은 수) / y(큰 수)의 r(나머지)로 y를 r이 0이 될 때까지 계속 나누면 최대공약수를 구할 수 있다.
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}의 최대 공약수 : {temp1}')
for n in range(1, temp1 +1) :
if temp1 % n == 0 :
print(f'{num1}, {num2}의 공약수 : {n}')
⭐
- (변수 선언) 사용자에게 입력받은 정수를 num1로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num2로 선언한다
- (변수 선언) num1과 num2를 각각 temp1과 temp2로 선언한다
- (while 반복문) temp2가 0보다 클 때까지 반복해라
- temp은 temp2의 값이다
- temp2는 temp1을 temp2로 나눈 나머지 값이다.
- temp1은 temp이다
- (출력코드) num1, num2의 최대공약수 : temp1. 이라는 문구 출력
- (for~in 반복문) 1부터 temp1회까지 반복해라
- (if 조건문) temp1을 n으로 나눈 나머지가 0이라면
- (출력 코드) num1, num2의 공약수 : n. 이라는 문구 출력
→ (공배수) 두 개 이상의 수에서 공통된 배수.
→ (최소공배수) 소인수분해를 이용하면 최소공배수 및 공배수를 구할 수 있다.
→ 최소 공배수를 구하려고 하는 두 숫자의 곱에 최대공약수를 나눠서 얻어지는 몫의 값이 최소공배수.
num1 = int(input('1보다 큰 정수 입력 : '))
num2 = int(input('1보다 큰 정수 입력 : '))
num3 = int(input('1보다 큰 정수 입력 : '))
maxNum = 0
for n in range(1, num1 +1) :
if num2 % n == 0 and num1 % n == 0:
maxNum = n
minNum = (num1 * num2) // maxNum
#num1과 num2의 최소공배수가 num3 보다 작다는 전제하에 코드 작성
for i in range (1, minNum +1) :
if minNum % i == 0 and num3 % i == 0 :
# print(f'공약수 : {n}')
maxNum = i
minimumNum = (minNum * num3) // maxNum
print(f'최대공약수 : {maxNum}')
print(f'최소공배수 : {minimumNum}')
⭐
- (변수 선언) 사용자에게 입력받은 정수를 num1로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num2로 선언한다
- (변수 선언) 사용자에게 입력받은 정수를 num3로 선언한다
- (변수 선언) maxNum은 0으로 선언한다
- (for~in 반복문) 1부터 num1회까지 반복해라
- (if 조건문) num2를 n으로 나눈 나머지가 0이고 num1을 n으로 나눈 나머지가 0이라면
- maxNum은 n이 된다
- minNum은 num1과 num2를 더한 값에 maxNum을 나눈 몫이다
- (for ~ in 반복문) 1부터 minNum회까지 반복해라
- (if 조건문) minNum를 i으로 나눈 나머지가 0이고 num3을 i으로 나눈 나머지가 0이라면
- maxNum은 i가 된다
- minimumNum은 minNum과 num3의 곱에 maxNum을 나눈 몫이다
- (출력코드) 최대공약수 : maxNUm. 이라는 코드 출력
- (출력코드) 최소공배수 : minimumNum. 이라는 코드 출력
오늘 강의 8개를 듣고 실습문제를 푸는데 총 4시간 20분을 사용했다...
강의 하나가 10~15분인 것을 감안하였을 때 너무 오랫동안 시간 낭비를 하고 있는 것 같다.
사실 강의를 듣고 문제풀이가 바로 이해가 되는 것이 아니기에 왜 이런 코드를 사용했고 다른 코드나 함수로는 풀이가 어려운지 고민하는데 시간을 많이 사용하고 있다.
앞으로는 강의를 먼저 듣고 문제 풀이에 집중하는 시간을 가지는 방법으로 진행해봐야할 것 같다ㅠ