Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
32
代码:
素数打表法
#include<stdio.h> #include<stdlib.h> #include<string.h> #define max 10000 int z=0; int flag[10000]; int prime[10000]; void get_prime() { memset(flag,1,sizeof(flag)); int i,j; for(i=2; i<=max; i++) { if(flag[i]) { prime[z++]=i; for(j=i*i; j<=max; j+=i) flag[j]=0; } } } int main() { int n,i,j,ans; get_prime(); while(scanf("%d",&n),n) { ans=0; for(i=0; prime[i]<n/2; i++) { for(j=i+1; prime[j]<n; j++) { if(i!=j) { if(prime[i]+prime[j]==n) { ans++; } } } } printf("%d\n",ans); } return 0; }