永发信息网

输入2到200之间(包括2、200)的所有素数。我到底错在哪里?

答案:3  悬赏:0  手机版
解决时间 2021-03-24 11:43
  • 提问者网友:溺爱和你
  • 2021-03-23 22:23
输入2到200之间(包括2、200)的所有素数。我到底错在哪里?
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-03-23 23:38
while (b<=a-1)
{
if (a%b==0)
;
else
c=1;
b++;
}
这段的逻辑有问题。首先要知道,判断一个数a不是素数,只要它有一个除1和本身之外的一个约数即行,对应的代码是 if(a%b)==0 ;这条语句执行过一次就足以证明a不是素数。
但你现在这样写就变成了,从2~a-1 所有的数都能被a整除(这是不可能的),否则c=1,然后循环外用c来判断a是素数,所以结果把所有的数都输出了。
修改方法:在if (a%b==0)执行符合条件时,赋值c为0用以标志a不是素数,并用break跳出循环。
#include
main()
{
int a=3,b,c;
printf("2\n");
while (a<=200)
{
c=0;
b=2;
while (b<=a-1)
{
if (a%b==0)
{c=0;break;} // 就是这里

else
c=1;
b++;
}
if (c==1)
printf("%d\n",a);
else
;
a++;
}
}
全部回答
  • 1楼网友:愁杀梦里人
  • 2021-03-24 00:04
楼上正解,另外,你最好做个函数 判断指定数字是否是素数,这样会比较清晰点
你可以搜索下快速判断素数,有写东西可以学下的,数学方面的
  • 2楼网友:蕴藏春秋
  • 2021-03-23 23:51
这个判断语句有问题
if (a%b==0)
;
else
c=1;
这样子写相当于就是只要有一个b不能整除a,就判断a为素数,实际上应该是所有b不能整除a,a才是素数。要改的话,可以将c初始化为1,判断语句写为
if(a%b==0)
{c=0;break;}
这样一旦有一个b能整除a,就判断a不是素数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯