南京邮电大学c语言实验报告2哥德巴赫,C语言验证哥德巴赫猜想

你好,用几个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;

}

望采纳,欢迎追问~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值