
Contents
Problem
題目網址
中文網址
Solution
利用 Goldbach’s Conjecture ,可將大於等於 4 的偶數拆成兩個質數。
n 如果為偶數,就直接拆成 4 + x (偶數加偶數),$4 = 2 + 2$ ,x 大於等於 4 ,可拆成兩個質數。
n 如果為奇數,拆成 5 + x (奇數加偶數),$5 = 2 + 3$ ,x 大於等於 4 ,可拆成兩個質數。
Code
UVa 10168
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
#include<cmath> #define N 10000000
int () { static bool sieve[N] = { 1, 1 }; int SQRT = sqrt(N); for (int i = 2; i <= SQRT; i++) if (!sieve[i]) for (int j = i << 1; j < N; j += i) sieve[j] = true;
int n, i; while (scanf("%d", &n) != EOF) { if (n < 8) { puts("Impossible."); continue; }
if (n & 1) { n -= 5; printf("2 3 "); } else { n -= 4; printf("2 2 "); }
for (i = 2; i < n; i++) if (!sieve[i] && !sieve[n - i]) break;
printf("%d %dn", i, n - i); }
return 0; }
|
近期评论