题意:
给出一个,求有多少对素数相加等于
思路:
打个素数表就很简单了,注意一个细节,数组一个字节,可以开
,
四个字节,在这题如果开
会超内存,而且
以内只有
个素数。
MyCode:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e7+7,maxm=1e6+7;
bool vis[maxn];
inline ll read() {
ll s = 0, w = 1;
char ch = getchar();
while (ch < 48 || ch > 57) {
if (ch == '-') w = -1;
ch = getchar();
}
while (ch >= 48 && ch <= 57)
s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();
return s * w;
}
int prime[maxm];
int sieve(int n=1e7) {
for(int i=2;i*i<=n;++i)
if(!vis[i])
for(int j=i*i;j<=n;j+=i) vis[j]=true;
int k=0;
for(int i=2;i<=n;++i) if(!vis[i])
prime[++k]=i;
return k;
}
//664579
int main() {
int n,ans=0,cas=0,k=sieve(),t=read();
while(t--) {
n=read();
ans=0;
for(int i=1;i<=k;++i) {
if(prime[i]>(n>>1)) break;
if(!vis[n-prime[i]]) ++ans;
}
printf("Case %d: %d\n",++cas,ans);
}
return 0;
}
京公网安备 11010502036488号