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

帮我解答一下,谢谢!

for的父循环中m=5的时候,自循环规定了n<m,那此时n最大只能是4,子循环执行完了,也没有满足m=n,为何结果还有5。另外我在子循环里面加上n<=m,结果也是一样的。哪个正确?

@Perona


正在回答

7 回答

首先了解一下素数的概念。素数是只能除以1和自身的数。

这里2个for循环,外面的for循环是遍历0-50这几个数的,里面的for是看m除了自己还能不能被整除。

外面的for从2开始算m是不是素数,n是除数,除数从2开始,如果m除以2余数为0,说明m能被2整除,则m不是素数,里面for循环break,继续算外面的for循环m+1。

第一次循环:m=2,

        子循环:(因为这里n=2,n<m,不做循环),跳出,执行if(m == n) 输出2

第二次循环:m=3,

         子循环:n=2,m%2=1

          重点是(n++)这个,n++是什么呢?是自增1。本次循环中先取到n的值是2,但是循环结束后,n是不           是就自增了1,执行if(m == n) 输出3

第三次循环:m=4,

         子循环:n=2,m%2=0,不符合。

第三次循环:m=5,

         子循环:n=2,m%2=1,跳出 

        这里就是你想要知道的答应,当n循环到4的时候,跳出循环,n自增了1,执行if(m == n) 输出5。

......(接下来的循环自行脑补)

子循环为嘛要判n>m,因为素数是只能除以1和自身的数。那么除数和被除数相等是没有意义的。所以应该是n>m,而不是n>=m。

你看下,还有什么不懂的说说呗。

PS:你是第一个@我的人,我有种莫名的感动啊!太谢谢你,童鞋,你真可耐,么么哒~~~

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

小玖so 提问者

非常感谢!
2015-08-11 回复 有任何疑惑可以回复我~

明白了,受教

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

666

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

首先M=2 N=2 余数为0 跳出循环 然后 M++  M=3 N=2 余数为1不跳 N<M N++ N=3 余数为0则跳出循环 以此类推。这才是正解,按楼主的理解,9就不行了,9可以被3整除,不是素数。

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

Perona

你再看一遍吧。当m=9时,其实跟当m=4的原理是一样滴。就是这一行代码 if(m%n == 0 ) break; 而且循环刚开始是m=2,n=2,执行的是这行代码 if(m == n)
2015-09-17 回复 有任何疑惑可以回复我~

话说一开始就被素数的概念给砸晕了。。。

看了老半天觉得应该得用模运算,就是没敢下手,其实就是两行代码的事。。。

除余运算,看来得重视了

多谢楼主,提点啦

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

判断这个,只判断第一个数字的,比如第一次循环的m=2 n=2那么这不就是相等情况了吗?你把整个运算顺序分析一下

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

举报

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

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

进入课程

帮我解答一下,谢谢!

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