반응형
Problem 5
1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다.
그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까?
처음 아이디어
- 이 문제는 최소공배수를 구하는 문제이다
- 숫자 4, 6의 경우, 이 때의 최대공약수(GCD)는 2, 최소공배수(LCM)는 12이고,
4 = GCD * 2, 6 = GCD * 3 에서 LCM = GCD * 2 * 3 = GCD * 2 X GCD * 3 / GCD 이다. - 이 때, 추가로 숫자 7과의 최대공배수를 구하려면, 처음부터 다시 최대공약수&최소공배수를 구할 필요 없이,
앞서 구한 최소공배수인 12와 7 사의의 최소공배수를 구하면, 이 값이 4, 6, 7의 최소공배수가 된다. - 같은 논리로, 1부터 차례대로 20까지 최소공배수를 구하면 된다.
import math
LCM = 1
for i in range(1, 21):
GCD = math.gcd(i, LCM) #최대공약수 계산
LCM = int(i*LCM/GCD) #최소공배수 계산
print(i, LCM)
결과 :
1 1
2 2
3 6
4 12
5 60
6 60
7 420
8 840
9 2520
10 2520
11 27720
12 27720
13 360360
14 360360
15 360360
16 720720
17 12252240
18 12252240
19 232792560
20 232792560
다른 아이디어
- 실제로 숫자를 1부터 차례로 1씩 늘려가며 1부터 20까지 나눈다.
- 제일 먼저 나오는 숫자가 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수이다.
단점 : 컴퓨터가 안좋아서 그런것도 있지만, 시간이 오래 걸린다.
num = 1
while num > 0 :
for x in range(1,21) :
if num % x != 0 :
num += 1
break
else :
print(num)
num = 0
결과 :
232792560
걸린 시간 :
497.54279375076294초.....ㄷㄷ
반응형
'알고리즘 문제 & 프로그래밍 > 파이썬' 카테고리의 다른 글
[백준 1110번] 더하기 사이클 문제 | 파이썬 while문 (0) | 2020.06.20 |
---|---|
[백준 2884번] 알람시계 문제 | 파이썬 if문 (0) | 2020.06.13 |
[프로젝트 오일러] 4번 문제 & 풀이 (세자리 수를 곱해 만들 수 있는 가장 큰 대칭수) (0) | 2020.05.18 |
[프로젝트 오일러] 3번 문제 & 풀이 (가장 큰 소인수 구하기) (0) | 2020.05.18 |
오일러 프로젝트 2번 (0) | 2018.12.08 |
댓글