我写的程序如下,但是运行发现无法实现循环。求教怎么改动?
=======================================
#include<stdio.h>
#include<math.h>
int main()
{
int n,i;
n=100;
do
{ i=2;
while(i<=sqrt(n))
{if(n%i==0)
i=n;
else
i=i+1;
}
if(i<sqrt(n))
{
printf("%d",n);
}
n=n+1;
}while(n>200);
return 0;
}
我知道这个程一开始就有问题。只是我想问个究竟。为什么这样不可以?
应该是对素数的定义没有理解吧。
素数,是定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
简而言之,素数就是只能被1和它自己相乘得到的数。所以,除了1和它自己之外,它对其它数取余数,结果都不是0。
同时,无论什么数,除了它自己之外,最大的因数肯定是它的一半,所以只需要查找到它的一半就可以了,不必从1查找到它自己。而且,这里是找素数,如果它的因数包括它自己的一半与数字2的话,那它也不会是素数了,所以查找的界限定为比如 i/2 是不会有遗漏的。
至于你的原来的代码里为什么是它自己开平方,我数学记得不多了,不是太清楚。
然后,就是根据定义去判断一个数是不是素数,那么,就必须让它与从2到它的一半的所有的数的余数都不为0,反应到代码里就是不仅仅要 「i % n != 0」,而且还要全部能除的数都除一遍,也就是「 n == k」,这个时候,才能确定这个数是素数了。
输出截图:
还有一张是把 i 的初始值改为 3 的输出截图,可以说是很规整了!
如有帮助,烦请点采纳,谢谢!