본문으로 바로가기
728x90
반응형

[14번 문제]


양의 정수 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까지 도달하는데 가장 긴 과정을 거치는 숫자는 얼마입니까?

참고: 계산 과정 도중에는 숫자가 백만을 넘어가도 괜찮습니다.


[ 번역링크 / 원본링크 ]


[코드]


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
26
27
28
29
30
31
32
33
34
35
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace::std;
 
int check(unsigned int num)
{
    int temp = 0;
    while (num > 1)
    {
        if (num % 2 == 0)
            num /= 2;
        else
            num = num * 3 + 1;
        temp++;
    }
    return  temp;
}
int ans=0;
int main()
{
    int max=1,temp;
    for (int i = 2; i <= 1000000; i++)
    {
        temp = check(i);
        if (temp > max)
        {
            max = temp;
            ans = i;
        }
    }
    cout << ans << endl;
    system("pause");
    return 0;
}
cs

728x90
반응형