#include <stdio.h> int printSequenceTo(unsigned n) { if (n == 1) { printf("1"); return 1; } int depth; if (n & 1) { int factor = 3; do { if (n % factor == 0) { depth = printSequenceTo(n / factor * (factor-1)); factor = 0; break; } factor += 2; } while (factor * factor <= n); if (factor) depth = printSequenceTo(n-1); } else depth = printSequenceTo(n/2); 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)); }
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]