HDU 2098 分拆素数和

分拆素数和

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 15712    Accepted Submission(s): 6789

Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
 
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
 
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
 
Sample Input
30
26
0
 
Sample Output
3
2
 
类似于NEFU 2,不过要注意这里是要拆成两个不同的素数
 
[C++]
 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 
 6 bool isPrime[10001];
 7 
 8 void initial()
 9 {
10     memset(isPrime,true,sizeof(isPrime));
11     isPrime[0]=isPrime[1]=false;
12     for(int i=4;i<=10000;i+=2)
13         isPrime[i]=false;
14     for(int i=3;i<=100;i+=2)
15         if(isPrime[i])
16             for(int j=i*2;j<=10000;j+=i)
17                 isPrime[j]=false;
18 }
19 
20 int main()
21 {
22     int n;
23 
24     initial();
25 
26     while((cin>>n)&&n)
27     {
28         int ans=0;
29         for(int i=2,x=n/2+n%2;i<x;i++)
30             if(isPrime[i]&&isPrime[n-i])
31                 ans++;
32         cout<<ans<<endl;
33     }
34 
35     return 0;
36 }

 

 
posted @ 2013-05-09 14:51  ~~Snail~~  阅读(130)  评论(0)    收藏  举报