题意:哥德巴赫猜想。问一个大于2的偶数能被几对素数对相加.
思路:欧拉筛,因为在n<215,在3万多,一个欧拉筛得时间差不多4*104, 那么筛出来的素数有4千多个,那么两两组合直接打表,时间复杂度下于16*106
则时间还是卡的过去。
ac代码:
#include<cstdio> const 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 ", viss[n]); } }