c语言求100以内约数最多的数,c语言求100以内的质数

满意答案

00e27ab806e4881f8254fe7ae8741834.png

yci125

2018.10.20

00e27ab806e4881f8254fe7ae8741834.png

采纳率:59%    等级:9

已帮助:113人

以我来看我觉得两个for循环都有问题。

首先第一个for循环应该错了。应该是i < 100。因为是求100以内的,所以要循环到100。

这个程序就是利用for循环让i从2遍历到99.然后利用j找出了1和本身之外i的因数。

那么第二个for循环问题就来了,我们寻找i的因数的时候,并不需要从2一直找到i本身,只要找到i的一半就可以停止了。举个简单例子,比如我们要找98的因数,那么我们只需要找到98÷2 = 49就行了,因为49之后的数字是肯定不能整除98的。同理大于i/2之后的数字是肯定不能够整除i的。所以第二个for的条件应该是j <= (i/2)而不是j。下面就简单了。如果j是i的因数,那么i%j=0. 就直接continue(顺便提一句这里是不能用break的,因为break是直接跳出了for循环,相当于直接结束了整个for循环,而此时还没有遍历到100的,应该用continue,continue就是结束当前循环并且执行i++继续下一轮循环)继续循环而不用执行print语句(这个时候代表i不是质数,因为除了1和它本身还有j这个因数。)。同理,如果从2到i/2都没有i的因数,那么就说明i没有其他因数,也就是质数了,所以print输出i。

另外补充一下:

i/j是求i除以j的商,比如11 / 3 = 3; 6 / 3 = 2

i%j是求i除以j的余,比如11 % 3 = 2; 6 % 3 = 0。追问: 谢谢了,我主要想问一下他在第二个for的时候 if(!(i%j)) break,如果为真就是打印,假就不打印吗,然后在考虑另一个if

追答:不对好像不能你这样写,应该是这样:

for (int i = 2; i < 100; i++)

{

for (int j = 2; j <= (i / 2); j++)

{

if (!(i%j))

continue;

if (j == (i / 2))

printf("%d是质数\n",i);

}

}

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值