양의 정수 n에 대하여, 다음과 같은 계산 과정을 반복하기로 합니다.
n → n / 2 (n이 짝수일 때)
n → 3 n + 1 (n이 홀수일 때)13에 대하여 위의 규칙을 적용해보면 아래처럼 10번의 과정을 통해 1이 됩니다.
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
아직 증명은 되지 않았지만, 이런 과정을 거치면 어떤 수로 시작해도 마지막에는 1로 끝나리라 생각됩니다.
(역주: 이것은 콜라츠 추측 Collatz Conjecture이라고 하며, 이런 수들을 우박수 hailstone sequence라 부르기도 합니다)그러면, 백만(1,000,000) 이하의 수로 시작했을 때 1까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?
참고: 계산 과정 도중에는 숫자가 백만을 넘어가도 괜찮습니다.
이제부터 조금씩 오래 걸린다. timethis로 시간을 측정해보니 약 25초 정도 걸린다.
약간 더 개선할 수는 있겠지만, 25초 정도야 못기다릴 것도 아니니 넘어가자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#!/usr/bin/env perl use 5.010; use strict; use warnings; my $r = 0; my $c = 0; for (1..1000000) { my $t = 0; my $k = $_; while ($k > 1) { $t++; if ($k%2 == 0) { $k /= 2; } else { $k = 3*$k +1; } } if ($t > $c) { $c = $t; $r = $_; } } say $r; |