题目分析
就是打表,然后发现超内存,然后用了bool数组发现过了,才400ms,表示这个OJ跑的真快。对于素数注意判重。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e7;
#define LL long long
bool vis[maxn+5];
int prime[670000];
void init(){
int tot = 0;
for(int i = 2; i <= maxn; i++)if(!vis[i]){
prime[tot++] = i;
for(LL j = (LL)i*i; j <= maxn; j += i) vis[j] = true;
}
}
int main(){
init();
int T, n;
scanf("%d", &T);
for(int kase = 1; kase <= T; kase++){
scanf("%d", &n);
int tot = 0;
for(int i = 0; i < 664579 && prime[i] <= n/2; i++){
if(n - prime[i] >= 2 && !vis[n-prime[i]]) tot++;
else if(n - prime[i] < 2) break;
}
printf("Case %d: %d\n", kase, tot);
}
return 0;
}