为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这样做可以得出素数?原理是什么不太理解

int m, n;

    for(m=2; m<=50; m++)

    {

for(n=2; n<m; n++)

        {

            if(    m%n==0   )       //什么条件下跳出当前循环

             break;                //这里应该退出当前循环了

}

        if(m == n)   //n循环结束后,如果m=n的话就输出m

            printf("%d  ", m);

}

请问这样的原理是什么?我不太理解


正在回答

7 回答

意思就是当m为5的时候,n从2到4全部走一遍,m%n只要不为0,就代表m可以被其他数除,就不是素数

1 回复 有任何疑惑可以回复我~

if()的定义  不等于0时候不执行if的内容 n就一直加   加到n<m 不成立停止 或者到符合if定义执行if(我是这么理解的)

0 回复 有任何疑惑可以回复我~
#1

超优秀

理解都能理解,就是不知道这么理解到底对不对,还是这么理解,,,是不是因为之前的m=2,n=2,所以两个可以相等的,,,啊啊啊啊啊啊 ,整不明白,睡不着觉啊,
2020-03-30 回复 有任何疑惑可以回复我~

楼上在说什么东西呀,乱七八糟的。素数就是除了1和其本身之外不能被其他数整除的数。第一个for循环是外循环,走到50.第二个for循环是内循环,如果整除了直接跳出循环(不是素数),如果没有的话一直到n==m循环条件不满足,内循环终止。再根据if(m == n)判断是不是走完了整个循环(素数),而不是中间跳出的。

6 回复 有任何疑惑可以回复我~
#1

慕尼黑9073084

请问一下if(m==n)为什么可以判断是否走完了整个循环,又是怎么判断不是从中间跳出的?
2019-08-24 回复 有任何疑惑可以回复我~
#2

小小疾飞 回复 慕尼黑9073084

内循环就是走到m的当前值,如果没提前跳出循环,那么n就等于m,那么m就是素数了。
2019-08-24 回复 有任何疑惑可以回复我~
#3

慕尼黑9073084 回复 小小疾飞

哦哦哦懂了懂了,谢谢!
2019-08-28 回复 有任何疑惑可以回复我~
#4

qq_慕瓜0528938 回复 小小疾飞

谢谢你,看你的解释我也看明白了。
2019-08-31 回复 有任何疑惑可以回复我~
#5

小小疾飞 回复 qq_慕瓜0528938

嗯嗯 祝学习顺利
2019-08-31 回复 有任何疑惑可以回复我~
#6

超优秀 回复 小小疾飞

n不是小于m吗,怎么会走到当前的值
2020-03-30 回复 有任何疑惑可以回复我~
查看4条回复

然后m等于6时,n=2,此时6%2==0,跳出循环,但是m不==n(6不==2)所以没有被打印,然后下一个

1 回复 有任何疑惑可以回复我~

哦我明白了,是不是m一直等于5,然后n依次等于2,3,4,始终不能使m%n==0,直到n等于5时,因为n不<m导致跳出循环了,此时m=5,n=5,就被打印了

0 回复 有任何疑惑可以回复我~
#1

慕桂英1572852

开窍了
2019-08-04 回复 有任何疑惑可以回复我~

是不是说5%2不等于0并不会退出循坏,而是把n++然后再循环直到有一次m不<0或者m==n时才跳出循环?

0 回复 有任何疑惑可以回复我~

就比如说,m=5时,进入第一个循环:n=2,n<m(2<5)符合要求,进入下一层if m%n。m%n就是5%2不等于0,不符合要求,那这个循环就结束了,进入if(m==n),这时5不等于2不符合要求,5就没有被打印,那这个循环也结束了,回到最开始,5就没有被打印出来啊。为什么结果却有一个5

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926210    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

为什么这样做可以得出素数?原理是什么不太理解

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信