题意:哥德巴赫猜想。问一个大于2的偶数能被几对素数对相加.
思路:欧拉筛,因为在n<215,在3万多,一个欧拉筛得时间差不多4*104, 那么筛出来的素数有4千多个,那么两两组合直接打表,时间复杂度下于16*106
则时间还是卡的过去。
ac代码:
#includeconst int N = 4e4;int prime[N];bool vis[N];bool is_prime[N];int viss[N<<2];int Prime(){ int cnt = 0; for (int i = 2; i <= N; ++i) { if (!vis[i]) { prime[cnt++] = i; is_prime[i] = 1; } for (int j = 0; j < cnt&&i*prime[j] <= N; ++j) { vis[i*prime[j]] = 1; if (i%prime[j] == 0)break; } } return cnt;}int main(){ int k = Prime(); for (int i = 0; i < k;++i) for (int j = 0; j <= i; ++j) viss[prime[i] + prime[j]]++; int n; while (scanf("%d", &n), n) { printf("%d\n", viss[n]); }}