编程题4(适合新手练习)
编写一个程序,对于用户输入的正偶数n,将其分解成两个素数之和.如:用户输入正整a,a=b+d,b和d是两个素数,
#include <stdio.h> #include <math.h> int sushu(int i) { int k,temp; static int ou[10000000] ={0,0,1,1}; //记录某数是否为素数 if(ou[i]!=0) return ou[i]; if(i%3==0) //除2,3外的素数一定是6n-1,6n+1的形式 return ou[i]=2; temp=i/3; for(k=1;6*k-1<=temp;++k,temp=i/(6*k-1)) //x1,x2有交叉时停止 { if(i%(6*k-1)==0) return ou[i]=2; if(i%(6*k+1)==0) return ou[i]=2; } return ou[i]=1; } int main() { int x,n,p; while(scanf("%d", &x)!=EOF) { if(x==4) { printf("4=2+2\n"); continue; } if(sushu(x-3)==1) printf("%d=3+%d\n",x,x-3); n=x/2; for(p=1;6*p+1<=n;++p) { if(x%6==4||x%6==0) if(sushu(x-(6*p-1))==1&&sushu(6*p-1)==1) printf("%d=%d+%d\n",x,6*p-1,x-(6*p-1)); if(x%6==2||x%6==0) if(sushu(x-(6*p+1))==1&&sushu(6*p+1)==1) printf("%d=%d+%d\n",x,6*p+1,x-(6*p+1)); } if(6*p-1<=n) if(sushu(x-(6*p-1))==1&&sushu(6*p-1)==1) printf("%d=%d+%d\n",x,6*p-1,x-(6*p-1)); } return 0; }