你好,用几个Sample Input试了一下你提供的代码,都可以得出一组正确答案,代码的问题在于不能输出全部符合猜想的数字组合,下面做出说明:
#include
#include
int main( )
{
long int j,n,p,q,flagp,flagq;//定义整型即可满足题意
printf("please input n :");
scanf("%ld",&n );
if (((n%2)!=0)||(n<=4))
printf("input data error!\n");
else
{ p=1;
do {
p=p+1;
q=n-p;
flagp=1;
for(j=2;j<=(int)(sqrt(p));j++)
{
if ((p%j)==0)
{
flagp=0;
break;
}
}
flagq=1;
for(j=2;j<=(int)(sqrt(q));j++)
{
if(q%j==0)
{
flagq=0;
break;
}
}
/*此处没有必要运用两组for循环分别判断是否满足素数,
当第一个数p不满足素数时,仍对原有的q进行了不必要的判断,冗杂繁复,
将两个数的素数判断都置于一个for循环中即可*/
} while(flagp*flagq==0);
//当有一组数字满足条件时,flagp*flagq==1,即跳出while循环,无法输出所有组合
printf("%d %d\n",p,q);
}
return 0;
}
现给出修改建议
#include
#include
int sushu(int x) //定义一个函数,判断一个数是否是素数
{
int flag=0,a,i;
a=(int)sqrt(x);
for(i=2;i<=a;i++) {
if(x%i==0)
flag=1;
}
return flag;
} //如果是素数,函数返回值为0,非素数返回值为1
int main()
{
int n,i,j,num1,num2;//n为输入的偶数,i,j为参与循环测试的数,num1,num2为判断是否满足条件的参数
printf("please input n :");
scanf("%ld",&n );
if (((n%2)!=0)||(n<=4))
printf("input data error!\n");
else
{
for(i=3;i<=n/2;i=i+2)//循环至 n/2即可,满足输出时小的素数在前(从最小的素数3开始循环)
{
num1=0;
num2=0;
num1=sushu(i); //调用函数给参数赋值
if(num1==0) //第一个数满足素数条件时,进行第二个数的素数判断
{
j=n-i;
num2=sushu(j);
}
if(num1==0 && num2==0)//两个数都满足素数,即输出一组数
printf("%d %d\n",i,j);
}
}
return 0;
}
望采纳,欢迎追问~