#include #include #include #define FIBMX 64 long long fib[FIBMX]; int Q(long long n) { assert(n <= fib[FIBMX-1]); int digits[256]; long long ncpy = n; int dlen = 0; while(ncpy > 0){ int d = ncpy % 2; digits[dlen++] = d; ncpy = (ncpy-d)/2; } int p, q, res = 0; int seen[FIBMX], idx; for(idx=0; idx= subval) break; } if(idx != FIBMX && fib[idx] == subval){ if(!seen[idx]){ res += 1; seen[idx] = 1; } } } } return res; } int main(int argc, char **argv) { int mx = 5; if(argc == 2){ int newmx = atoi(argv[1]); if(newmx > 0) mx = newmx; } int idx; fib[0] = 1; fib[1] = 2; for(idx = 2; idx < FIBMX; idx++){ fib[idx] = fib[idx-1] + fib[idx-2]; } int nxtval = 1; long long n=1; while(nxtval < mx){ if(Q(n) == nxtval){ if(nxtval > 1) printf(" "); printf("%ld", n); nxtval++; } n++; } printf("\n"); return 0; }