Description:
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
因为数最大到10000,先将1到10000是否为素数的数组填满,后面就好做了。用的仍然是筛法求素数。
#include<iostream>
#define MAX_NUM 10010
using namespace std;
char IsPrime[MAX_NUM+10];//素数为1
int main(){
int n;
for(int i=2;i<=MAX_NUM;++i)
IsPrime[i]=1;//假设都是素数
for(int i=2;i<=MAX_NUM;++i)
if(IsPrime[i])
for(int j=i*2;j<=MAX_NUM;j+=i)//将第一个数的倍数都划掉,IsPrime[i]设为0
IsPrime[j]=0;
while(cin>>n&&n!=0){
int num=0;
for(int i=1;i<=n/2;i++){
if(IsPrime[i]&&IsPrime[n-i]&&(i!=n-i))
num++;
}
cout<<num<<endl;
}
return 0;
}