#include <stdio.h> int printSequenceTo(unsigned n) { int depth = 0; if (n == 1) { printf("1"); return 1; } if (((n - 1) & (n - 2)) == 0) { depth = printSequenceTo(n - 1); goto end; } if (n & 1) { int factor = 3; do { if (n % factor == 0) { depth = printSequenceTo(n / factor * (factor - 1)); goto end; } factor += 2; } while (factor * factor <= n); 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,4,5,10,15,30,31,62,124,155,310 [12 elements] 1,2,3,6,7,14,21,42 [8 elements] 1,2,4,5,10,15 [6 elements] 1,2,4,8,16,17,34,51,102,153,306,307,614,1228,1535 [15 elements] 1,2,4,5,10,11,22,44,88,89,178,356,445,890,979,1958,2047 [17 elements] 1,2,4,5,10,20,40,41,82,83,166,249,498,747,1494,2988,3071 [17 elements] 1,2,4,5,10,11,22,44,55,110,165,330,495 [13 elements] 1,2,4,8,16,32,64,128,256,512,1024,1025 [12 elements]