#include #include #define MAX 1000000 int prim [MAX]; int sieb [MAX]; int k; int n = 0; FILE *input; void GetPrim () { int i,j; for (i = 0; i < MAX; i++) { sieb [i] = 1; } for (i = 2; i < MAX; i++) { if (sieb [i]) { prim [n++] = i; for (j = i; j < MAX; j+=i) { sieb [j] = 0; } } } } int ReadCase () { fscanf (input, "%d", &k); if (k == 0) return 0; return 1; } void SolveCase () { int i, j; for (i = n-1; i >= 1; i--) { if (prim [i] + prim [i] < k) { printf ("Goldbach's conjecture is wrong."); return; } for (j = 1; j <= i; j++) { if (prim [i] + prim [j] > k) j = i; if (prim [i] + prim [j] == k) { printf ("%d = %d + %d\n", k, prim [j], prim [i]); return; } } } } int main () { input = fopen ("goldbach.in","r"); assert (input != 0); GetPrim (); while (ReadCase ()) SolveCase (); fclose (input); return 0; }