가설: 어떤 임의의 자연수를 생각하자. 그 자연수가 짝수면 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
  • goldenbug 2008.10.13 13:22 신고 ADDR EDIT/DEL REPLY

    long long X 라고 하면 어떻게 되는거죠?
    제가 C를 배울 때는 long이 두 번 겹치는 건 없었는데, 버전이 바뀌면서 새로 생긴건가요??

    • snowall 2008.10.13 18:38 신고 EDIT/DEL

      리눅스에서 64비트 정수를 표현할 때 씁니다.
      윈도에서 INT64 랑 같은 자료형이고 이름만 달라요.