一道C语言难题求解,求大神求解?

外层for循环是n是100~200间的各数;(因为呮有奇数才有可能是素数所以n每次增2)

变量k是这个数的开方(为了简便减少计算次数)

内层for循环i是从2~这个数的开方k;

如果这个数n能够整除这个数,那么这个数n肯定不是素数跳出内循环,外层n累加2继续进入内循环。。如此计算下去如果内循环结束了,还是不符合if这個判断条件那么说明这个数肯定是素数,即输出这个素数m的作用是6个素数一换行

你对这个回答的评价是?

首先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个数字。

你对这个回答的评价是

 

2/10等于0.2定义的Z是整形,应该用float定義

打错了就是float类型
?为什么输出为0.000000啊?
我猜可能是取整输出了你把X和Y也用float定义,然后赋值2.0和10.0试试
整形除整形输出只会是整形

你对这個回答的评价是?

 
 
 

我要回帖

更多关于 难题求解 的文章

 

随机推荐