···这题,有坑,但是很有营养。
一开始以为可以用数论的什么方法,然后就瞎推,结果没写出啥来,就百度了。
发现暴利过了,还是赤裸裸的卡内存,至少学到了bool很省内存
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fin(a,n) for(int i=a;i<=n;i++)
const int maxn=1e7+10;
bool isprime[maxn];
int p[700005];
int cnt=0;
void f()
{ memset(isprime,true,sizeof(isprime));
isprime[1]=false;
fin(2,maxn)
{
if(isprime[i])
{ p[++cnt]=i;
for(int j=i+i;j<=maxn;j+=i)
isprime[j]=false;
}
}
}
int main()
{ f();
int n;
scanf("%d",&n);
for(int cas=1;cas<=n;cas++)
{
int x;
scanf("%d",&x);
int ans=0;
for(int i=1;p[i]<=x/2&&i<=cnt;i++)
{
if(isprime[x-p[i]])ans++;
}
printf("Case %d: %d\n",cas,ans);
}
}