가설: 어떤 임의의 자연수를 생각하자. 그 자연수가 짝수면 2로 나누고 홀수면 3배하여 1을 더한다. 그 결과로 얻어진 자연수에 같은 조작을 반복한다. 그럼 언젠가 반드시 1이 된다.

그 문제에 도전하는 C프로그램이다.

#include<stdio.h>
#include<stdlib.h>

long long evenodd(long long);
long long length(long long);
int main(){
    long long i,leng,t,keep;
    leng=1ll;
    keep=1;
    i=1000000ll;
    while(i){
        t=length(i);
        if(leng<=t){
            leng=t;
            keep=i;
        }
        i--;
    }
    printf("%lld has length of %lld\n",keep,leng);
}
long long evenodd(long long n){
    if(n%2ll==0ll){
        return n/2ll;
    }
    else{
        return n*3ll+1ll;
    }
}
long long length(long long l){
    long long leng=1;
    long long i=l;
    while(i-1){
        i=evenodd(i);
        leng++;
    }
    printf("%lld, %lld\n",leng,l);
    return leng;
}
by snowall 2008. 10. 12. 20:50