Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <vector> #include <cmath> #include <queue> #include <deque> #include <cmath> #include <map> using namespace std; typedef long long ll; #define INF 0x7fffffff const double inf=1e20; const int maxn=1e5+10; const int mod=1e9+7; int vis[maxn]; int main() { int n=1e5; int m=sqrt(n+0.5); memset(vis,0,sizeof(vis)); for(int i=2;i<=m;i++)if(!vis[i]) for(int j=i*i;j<=n;j+=i)vis[j]=1; int x; while(scanf("%d",&x)!=EOF){ if(x==0)break; int num=0; for(int i=2;i<x/2;i++){ if(!vis[i]&&!vis[x-i]){ num++; //printf("%d %d\n",i,x-i); } } printf("%d\n",num); } return 0; }