问题:求100到200之间的素数。
首先,需要一个循环,分别处理100到200之间的每个数。
for (int i = 100; i <= 200; i++)
{
}
然后,对于每个数i,判断它是不是素数,需要用i分别除以2,3,4……,一直除到i-1为止?不不不,除到i/2为止?不不不,应该除到i的平方根为止。当然,你除到i-1为止也没有错,就是做了无用功而已。
如果一直没有整除,for循环结束的时候,循环变量j会超出循环的变化范围,即j>sqrt(i),换句话说,如果j>sqrt(i)成立,说明一直没有整除过,即i是个素数。
//求100到200之间的素数
#include <stdio.h>
#include <math.h>
int main()
{
int i, j;
int n = 0;
for (i = 100; i <= 200; i++)
{
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
break;
}
if (j > sqrt(i))
n++;
}
printf("100到200之间的素数个数:%d\n", n);
return 0;
}
如果是求一亿以内的素数个数,就不能这样写了,因为双重for循环的时间复杂度是很高的。