#include <stdio.h>
#include <stdlib.h>
#define M 10
int g(int n, int s[], int r, int t) { return (t <= n) ? (s[t] = 1, g(n, s, r, t + r)) : 0; }
int h(int n, int s[], int r, int k) {
return (r >= n) ? 0
: (s[r] == 0) ? ( printf("%-3d ", r),
(k == M - 1) ? putchar('\n') : 0,
g(n, s, r, r),
h(n, s, r + 1, (k == M - 1) ? 0 : k + 1) )
: h(n, s, r + 1, k);
}
int f(int n) {
int *s;
return (s = calloc((n + 1), sizeof(int))) ? ( s[0] = s[1] = 1,
h(n, s, 2, 0),
free(s), 0)
: 0;
}
#define DEFAULT_NUM 100
int main() {
int n;
do {
printf("n = ");
if (scanf("%d", &n) != 1)
n = DEFAULT_NUM;
} while (!(n >= 2));
putchar('\n');
f(n);
return 0;
}
/* end */