사실 이건 뭐라 하기도 힘들다.
문제를 직접 보자
http://projecteuler.net/index.php?section=problems&id=207
이 블로그 어딘가에 이 문제에 대한 상세한 해설이 적혀 있을 것이다.

#include<stdio.h>
#include<stdlib.h>
#define YES 1
#define NO 0

int isPowerOfTwo(int);
int main(){
    int n=1;
    int q=0;
    int m;
    while(1){
        m=n*(n+1);
        if(isPowerOfTwo(n+1)==YES){
            q++;
            printf("q=%u, n=%u, m=%u, p(m)=%lf\n",q,n, m, ((double)q/(double)n));
        }
        if(((double)q/(double)n)<1.0/12345.0){
            printf("last, q=%u, n=%u, m=%u, p(m)=%lf\n",q,n, m, ((double)q/(double)n));
            exit(0);
        }
        n++;
    }
    return 1;
}

int isPowerOfTwo(int p){
    while(p-1){
        if(p%2!=0){
            return NO;
        }
        p=p/2;
    }
    return YES;
}
by snowall 2008. 10. 13. 21:38