题目链接:https://vjudge.net/problem/LightOJ-1259
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+5;
const int maxx=5e6+10;
bool vis[maxn];
int num[maxx];
map<int,int>mapp;
int t;
int top=0;
void prime()
{
memset(vis,0,sizeof(vis));
vis[0]=vis[1]=1;
for(int i=2; i<=sqrt(maxn); ++i)
if(!vis[i])
{
int j=2*i;
while(j<maxn)
{
vis[j]=1;
j+=i;
}
}
for(int i=0; i<maxn; ++i)
if(!vis[i])
num[top++]=i;
}
int main()
{
prime();
int T,n,m;
scanf("%d",&T);
m=T;
while(T--)
{
int res=0;
scanf("%d",&n);
printf("Case %d: ",m-T);
for(int i=0; num[i]<=n/2; ++i)
if(!vis[num[i]]&&!vis[n-num[i]])
res++;
printf("%d\n",res);
}
return 0;
}
注意:1.可以开到10^7规模的bool数组
2.相应的可以开到10^6数量级的int型数组