求素数个数

问题:求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 
#include 

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循环的时间复杂度是很高的。

你可能感兴趣的:(算法,c语言)