C语言的一道题目,跪求大神每一步详细解答 30
展开全部
首先main函数不用说了吧?
main函数第一行中定义了四个整形变量:n, k, i, m。
从1处可以得知,n的含义是n依次存储从101到200的所有数字,以便程序判断这些数字是否为素数。
在1处的for循环体中,将k定义为了n的平方根。从后面我们也可以看出,该程序检验n是否为素数的方法是依次用2, 3, 4, ..., k去除n,如果有一个数能整除n,就说明n不是素数。那么为什么是一直除到k而不是除到n-1呢?这是因为:
如果我们已经证明在区间[2, sqrt(n)]之间没有数字能够整除n,那么对于任意一个大于sqrt(n)的整数,要使这个整数能够整除n,则n必然能够找到另外一个小于sqrt(n)的因子,但是这却与我们已经证到的结论矛盾,因此此时任意一个大于sqrt(n)的整数都必定无法整除n,因此判断一个数是否为素数,只需要从2一直除到sqrt(n)就可以了。
那么那个2处的i >= k+1是什么意思呢?
从第二个for循环可以得出这样一个结论:如果n为非素数,则肯定有一个整数i能够整除n,那么那个break语句肯定就会被执行一次。一旦执行了break语句,则i变量则永远不可能大于k(因为最后一个i++这条语句肯定得不到执行),也就是i永远不可能大于或等于k+1。反过来说,如果n为素数,则执行完第二个for循环后,i的值必定为k+1,因此if判断语句块内的内容就肯定能够被执行,从而输出素数n的内容,并且将输出控制变量m的值递增1。
那个m和d我估计应该是控制输出的格式,就是输出来以后每一行都是d个数字。
main函数第一行中定义了四个整形变量:n, k, i, m。
从1处可以得知,n的含义是n依次存储从101到200的所有数字,以便程序判断这些数字是否为素数。
在1处的for循环体中,将k定义为了n的平方根。从后面我们也可以看出,该程序检验n是否为素数的方法是依次用2, 3, 4, ..., k去除n,如果有一个数能整除n,就说明n不是素数。那么为什么是一直除到k而不是除到n-1呢?这是因为:
如果我们已经证明在区间[2, sqrt(n)]之间没有数字能够整除n,那么对于任意一个大于sqrt(n)的整数,要使这个整数能够整除n,则n必然能够找到另外一个小于sqrt(n)的因子,但是这却与我们已经证到的结论矛盾,因此此时任意一个大于sqrt(n)的整数都必定无法整除n,因此判断一个数是否为素数,只需要从2一直除到sqrt(n)就可以了。
那么那个2处的i >= k+1是什么意思呢?
从第二个for循环可以得出这样一个结论:如果n为非素数,则肯定有一个整数i能够整除n,那么那个break语句肯定就会被执行一次。一旦执行了break语句,则i变量则永远不可能大于k(因为最后一个i++这条语句肯定得不到执行),也就是i永远不可能大于或等于k+1。反过来说,如果n为素数,则执行完第二个for循环后,i的值必定为k+1,因此if判断语句块内的内容就肯定能够被执行,从而输出素数n的内容,并且将输出控制变量m的值递增1。
那个m和d我估计应该是控制输出的格式,就是输出来以后每一行都是d个数字。
展开全部
定义几个变量;
外层for循环是n是100~200间的各数;(因为只有奇数才有可能是素数,所以n每次增2)
变量k是这个数的开方(为了简便减少计算次数)
内层for循环i是从2~这个数的开方k;
如果这个数n能够整除这个数,那么这个数n肯定不是素数,跳出内循环,外层n累加2,继续进入内循环。。。如此计算下去,如果内循环结束了,还是不符合if这个判断条件,那么说明这个数肯定是素数,即输出这个素数,m的作用是6个素数一换行
外层for循环是n是100~200间的各数;(因为只有奇数才有可能是素数,所以n每次增2)
变量k是这个数的开方(为了简便减少计算次数)
内层for循环i是从2~这个数的开方k;
如果这个数n能够整除这个数,那么这个数n肯定不是素数,跳出内循环,外层n累加2,继续进入内循环。。。如此计算下去,如果内循环结束了,还是不符合if这个判断条件,那么说明这个数肯定是素数,即输出这个素数,m的作用是6个素数一换行
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询