大意是给出某个数,问这个数能有多少种由两个素数相加的不同的组合
1筛出素数表;
2用素数表预处理每个数的素数组合数;
3直接输出;
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include <cstdio>
//#pragma comment(linker,"/STACK:102400000,102400000")
using namespace std;
bool isprime[40000];
int F[40000];
bool is_prime()
{
memset(isprime,true,sizeof(isprime));
for(int i=2;i<=32768;i++)
{
if(isprime[i])
{
for(int j=2*i;j<=32768;j+=i)
{
isprime[j]=false;
}
//cout<<i<<endl;
}
}
}
void setf()
{
memset(F,0,sizeof(F));
for(int i=4;i<=32768;i++)
{
for(int j=2;j<=i/2;j++)
{
if(isprime[j]&&isprime[i-j])F[i]++;
}
// cout<<F[i]<<endl;
}
}
int main()
{
is_prime();
setf();
int n;
while(~scanf("%d",&n))
{
if(n==0)break;
else cout<<F[n]<<endl;
}
return 0;
}