点击打开链接 素数也是质数,它只有1和本身两个约数。 素数打表: [cpp] view plain copy #include<cstdio> int n,i,j,a[1000001],p[100000],t=0; void main() { scanf("%d",&n); a[1]=0; for(i=2;i<=n;i++) a[i]=1; for(i=2;i<=n;i++) if(a[i]){ p[t++]=i; for(j=i+i;j<=n;j+=i)a[j]=0; } for(i=0;i<t;i++) printf("%d%c",p[i],i<t-1?' ':'/n'); } 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。 Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。 Sample Input 30 26 0 Sample Output 3 2 题解:首先要打出一个10000以内的素数表,然后利用给出的范围找的相应的素数,判断其中的两个素数和。 [cpp] view plain copy #include<stdio.h> #include<iostream> using namespace std; int main() { int i,j,k,r;int a[10009]; while(~scanf("%d",&i),i) { for(j=0;j<10009;j++) a[j]=1; a[0]=0,a[1]=0; for(j=2;j<10002;j++) { if(a[j]) { for(k=j+j;k<10009;k+=j)//范围要与上方的对应 a[k]=0; } } for(k=0,r=0;k<i/2;k++) { if(a[k]&&a[i-k])//首先确定两个和为i的数,再判断是否是素数 { r++; } } printf("%d\n",r); } return 0; }