分拆素数和 埃氏筛法
分拆素数和
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit
Status
Practice
HDU 2098
Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包括一些正的偶数。其值不会超过10000。个数不会超过500,若遇0,则结束。
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit
Status
Practice
HDU 2098
Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包括一些正的偶数。其值不会超过10000。个数不会超过500,若遇0,则结束。
Output
相应每一个偶数,输出其拆成不同素数的个数,每一个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
#include <iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<deque> #define MAX 10007 using namespace std; int n,ans; bool isprime[10007]; void sieve() { int p=0; for(int i=0;i<MAX;i++) isprime[i]=true; isprime[0]=isprime[1]=false; for(int i=2;i<MAX;i++) { if(isprime[i]){ for(int j=2*i;j<MAX;j+=i) isprime[j]=false; } } } int main() { while(1){ ans=0; scanf("%d",&n); if(n==0) break; sieve(); for(int i=2;i<n/2;i++) { if(isprime[i]&&isprime[n-i]) ans++; } printf("%d\n",ans); } return 0; }