hdu 2098
分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 37587 Accepted Submission(s): 16400
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2
Source
Recommend
#include<iostream> #include<math.h> #include<string> #include<algorithm> using namespace std; int a[10001]={0}; int b[10001]; int primer() { int i,j; a[0]=1;a[1]=1; for(i=2;i*i<10001;i++) { if(a[i]==1) continue;//减少时间 for(j=i+i;j<10001;j+=i) { if(j%i==0) a[j]=1; } } j=0; for(i=0;i<10001;i++) { if(a[i]==0) { b[j]=i; j++; } } } int main() { primer(); int n; while(cin>>n,n!=0) { int sum=0,flag=0; for(int i=0;i<n;i++) { if(b[i]>=n) ////减少时间 break; for(int j=i+1;j<n;j++) { if(b[i]+b[j]>n)////减少时间 break; if(b[i]+b[j]==n) sum++; } } cout<<sum<<endl; } }