c语言程序,验证哥德巴赫猜想,任何一个大于6的偶数,可表示为两个素数之和,每五组换一行!!!哪儿有错

#include<stdio.h>#include<math.h>intmain(void){intkai(intn);inti=3,j,m=0,num;while(i<... #include <stdio.h> #include <math.h> int main(void) { int kai(int n); int i=3,j,m=0,num; while(i<=100) { if(kai(i)==1) { for(j=3;j<=100-i;j++) { if(kai(j)!=0) { num=i+j; if(num%2==0&&num>=6&&num<=100) { printf("%d=%d+%d ",num,i,j); m++; if(m%5==0) printf("\n"); } } }i++; } } } int kai(int n) { int i,m; m=sqrt(n); for(i=2;i<=m;i++) { if(n%i==0) {return 0; break;} if(i>m) return 1; } } 展开
 我来答
百度网友3d8d4fb
2013-10-23 · TA获得超过111个赞
知道答主
回答量:42
采纳率:0%
帮助的人:6.7万
展开全部
算法上没有看 逻辑上的问题可以给你点一下:

首先 i++的位置是错误的,你现在i++ 的位置会让你的程序进入死循环,i++不应该在if判断中,因为如果if某次不为真,则永远无法执行i++,导致while一直为真,所以就成死循环了。

还有kai函数中,kai的返回值不只有1和0,m=sqrt(n); m的值起初的时候为1,总之是小于你for循环中i的初始值的 ,所以for循环会执行不到,函数正常结束,返回一个随机的整数值,这样就导致了你main函数中的if判断是否等于1或0时出问题。
追问
大神啊!!谢谢、现在明白了!
华英雄CN
2013-10-23 · 超过60用户采纳过TA的回答
知道答主
回答量:180
采纳率:100%
帮助的人:119万
展开全部
#include <stdio.h>
#include <math.h>
int main(void)
{
int kai(int n);
int i=3,j,m=0,num;
while(i<=100)
{
if(kai(i)==1)
{
for(j=3;j<=100-i;j++)
{
if(kai(j)!=0)
{
num=i+j;
if(num%2==0&&num>=6&&num<=100)
{
printf("%d=%d+%d ",num,i,j);
m++;
if(m%5==0) printf("\n");
}
}
}
i++;
}
}
}
int kai(int n)
{
int i,m; m=sqrt(n);
for(i=2;i<=m;i++)
{
if(n%i==0)
{return 0; break;}
if(i>m) return 1;
}
}
main();
追问
哪里错了呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式