也是用线性筛,但是v用int会爆,所以这个线性筛用的是另外一种写法
#include<cstdio> #include<cmath> #include<queue> #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; const int maxn = 1e7 + 10; bool a[maxn]; int prime[maxn/10];void initprime() {memset(a, 0, sizeof(a));int num = 0;for(int i = 2; i < maxn; ++i){if(!a[i]) prime[num++] = i;for(int j = 0; j < num && i * prime[j] < maxn; ++j){a[i * prime[j]] = 1;if(!(i % prime[j])) break;}} }int main() {initprime();int t;scanf("%d", &t);for(int i = 1; i <= t; ++i){int n, cnt = 0;scanf("%d", &n);for(int j = 0; prime[j] <= n/2 ; ++j)if(!a[prime[j]] && !a[n - prime[j]]) ++cnt;printf("Case %d: %d\n", i, cnt);}return 0; }