- 최대공약수。。。。어렴풋이 기억나
중학교 수준? 고등학교 수준의 수학을 요즘 배우고 있는데 정말 다 까먹었었기 때문에
처음부터 개념을 다시 잡아가는 중이다.
그것도 파이썬으로 구현하는 방법은 또 처음이라 여러모로 쉽지가 않지만,
그래도 이해하면 또 별거 아니다.
자, 그럼 최대공약수 예시 문제를 어떻게 풀어야 할까?
100부터 1000사이의 2개의 난수에 대해서 공약수와 최대공약수를 출력하고
서로소 인지 출력하는 프로그램을 만들어보자
1. 2개의 난수에 대해 공약수와 최대공약수를 구하기
2. 2개의 난수가 서로소 인지 확인하기
import random
rNum1 = random.randint(100,1000)
rNum2 = random.randint(100,1000)
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}는 서로소 이다. ')
결과)
공약수 : 1
최대공약수 : 1
209 과 888는 서로소 이다.
- 최소공배수도 구해보자
# 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}')
minNum = (rNum1 * rNum2) // maxNum
print(f'최소공배수: {minNum}')
결과)
rNum1 : 636
rNum2 : 861
공약수 : 1
공약수 : 3
최대공약수 : 3
최소공배수: 182532
최소공배수를 구하는 방법은 쉽다.
먼저 최대공약수를 구한 후, 두 수를 곱한 것에서 나누면 최소공배수를 알 수 있다.
3과 5의 최소공배수를 15이다. 두 수의 최대공약수는 1이기 때문에 두 수의 곱에서 1로 나누면 15이기 때문이다. (쉽네.....?)
이렇게 하나하나 차근차근 이해해 나가니까 막막했던 마음이 조금은 풀리기 시작했다.
하지만 뇌는 반복학습만이 살길이기에...계속 예제문제를 많이 접해봐야겠다!