fork download
  1. #include <stdio.h>
  2.  
  3. int printSequenceTo(unsigned n)
  4. {
  5. if (n == 1) { printf("1"); return 1; }
  6. int depth;
  7. if (n & 1) {
  8. int factor = n;
  9. while (int temp = factor & (factor-1)) factor = temp;
  10. do {
  11. if (n % (factor+1) == 0) {
  12. depth = printSequenceTo(n / (factor+1) * factor);
  13. goto end;
  14. }
  15. factor >>= 1;
  16. } while (factor);
  17. depth = printSequenceTo(n-1);
  18. goto end;
  19. }
  20. depth = printSequenceTo(n/2);
  21. end:
  22. printf(",%u", n);
  23. return depth + 1;
  24. }
  25.  
  26. int main(void)
  27. {
  28. printf(" [%d elements]\n", printSequenceTo(310));
  29. printf(" [%d elements]\n", printSequenceTo(42));
  30. printf(" [%d elements]\n", printSequenceTo(15));
  31. printf(" [%d elements]\n", printSequenceTo(1535));
  32. printf(" [%d elements]\n", printSequenceTo(2047));
  33. printf(" [%d elements]\n", printSequenceTo(3071));
  34. printf(" [%d elements]\n", printSequenceTo(495));
  35. printf(" [%d elements]\n", printSequenceTo(1025));
  36. }
Success #stdin #stdout 0s 2828KB
stdin
Standard input is empty
stdout
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]