#include <stdio.h> int printSequenceTo(unsigned n) { if (n == 1) { printf("1"); return 1; } int depth; if (n & 1) { int factor = n; while (int temp = factor & (factor-1)) factor = temp; do { if (n % (factor+1) == 0) { depth = printSequenceTo(n / (factor+1) * factor); goto end; } factor >>= 1; } while (factor); depth = printSequenceTo(n-1); goto end; } depth = printSequenceTo(n/2); end: printf(",%u", n); return depth + 1; } int main(void) { printf(" [%d elements]\n", printSequenceTo(310)); printf(" [%d elements]\n", printSequenceTo(42)); printf(" [%d elements]\n", printSequenceTo(15)); printf(" [%d elements]\n", printSequenceTo(1535)); printf(" [%d elements]\n", printSequenceTo(2047)); printf(" [%d elements]\n", printSequenceTo(3071)); printf(" [%d elements]\n", printSequenceTo(495)); printf(" [%d elements]\n", printSequenceTo(1025)); }
Standard input is empty
1,2,3,6,12,15,30,31,62,124,155,310 [12 elements] 1,2,3,6,7,14,21,42 [8 elements] 1,2,3,6,12,15 [6 elements] 1,2,4,8,9,18,36,72,144,153,306,307,614,1228,1535 [15 elements] 1,2,3,6,12,15,30,31,62,124,248,496,992,1023,2046,2047 [16 elements] 1,2,4,8,9,18,36,72,144,153,306,307,614,1228,1535,3070,3071 [17 elements] 1,2,3,6,12,15,30,60,120,240,480,495 [12 elements] 1,2,4,8,16,32,64,128,256,512,1024,1025 [12 elements]