#include #include #include #define out(z) printf("%d\n", (int)(z)) void main (int argc, char *argv[]) { int i, j, n = argc > 1 ? abs(atoi(argv[1])) : 0, half = (n - 1) / 2, root = sqrt(n); char *x = (char *) malloc(half); int count = 1, knocks = 0, dupls = 0; switch (n) { case 2: out(2); case 0: case 1: return; default: out(2); } for (i = half; i; x[--i] = 1); while ((n = 2 * i + 3) <= root) if (x[i++]) for (x[j = (n * n - 3) / 2] = 0; j < half; x[j += n] = 0); for (i = 0; i < half; i++) if (x[i]) out(2 * i + 3); }