编程题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;
}
