应该是对素数的定义没有理解吧。
素数,是定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
简而言之,素数就是只能被1和它自己相乘得到的数。所以,除了1和它自己之外,它对其它数取余数,结果都不是0。
同时,无论什么数,除了它自己之外,最大的因数肯定是它的一半,所以只需要查找到它的一半就可以了,不必从1查找到它自己。而且,这里是找素数,如果它的因数包括它自己的一半与数字2的话,那它也不会是素数了,所以查找的界限定为比如 i/2 是不会有遗漏的。
至于你的原来的代码里为什么是它自己开平方,我数学记得不多了,不是太清楚。
然后,就是根据定义去判断一个数是不是素数,那么,就必须让它与从2到它的一半的所有的数的余数都不为0,反应到代码里就是不仅仅要 「i % n != 0」,而且还要全部能除的数都除一遍,也就是「 n == k」,这个时候,才能确定这个数是素数了。
#include
#include
int main()
{
int i, k, n, m = 0;
for (i = 101; i <= 200; i = i + 2)
{
k = i / 2; // 被除的数,小于等于它的一半
for (n = 2; n <= k; n++)
{
if (i % n == 0)
break;
else if (n == k) // 要把从2到k的数都除一遍才能确定
{
printf("%8d", i);
m++;
if (0 == m % 10) //把这个if输出换行放到else if里面来,要不然后面会多很多空行
printf("\n");
}
}
}
printf("\n");
return 0;
}
输出截图:
还有一张是把 i 的初始值改为 3 的输出截图,可以说是很规整了!
如有帮助,烦请点采纳,谢谢!