分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12267 Accepted Submission(s): 5253
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
Source
2007省赛集训队练习赛(2)
#include <iostream>
using namespace std;
int p[1230];
/*bool isPrime (int p) /*较为快速的判断一个数是否是素数的函数*/
{
int i,j,k;
if(p==2||p==3) return true;
else if(p%2==0||p%3==0) return false ;
for(i=5,j=25,k=4;j<=p;i+=(k=6-k),j=i+i-1)
if(p%i==0) return false ;
return true ;
}*/
void prime()
{
p[0]=2; //cout<<p[0]<<endl;
p[1]=3;
p[2]=5;
int x=5,i,t=3;
while(x++&&x<=10000)
{
if(x%2==0||x%3==0) continue;
for(i=5;i<x;i++)
if(x%i==0) break;
else
{
if(i==x-1)
{
p[t]=x; // cout<<p[t]<<"*"<<t<<endl;
t++;
}
}
}
}
int split(int n)
{
int i,j,k=0;
for(i=0;p[i]<n;i++)
for(j=0;p[j]<n;j++)
if(p[i]+p[j]==n&&p[i]!=p[j])
k++;
return k/2;
}
void main()
{
prime();
int n;
while(cin>>n&&n)
if(n%2==0)
cout<<split(n)<<endl;
}