求素数个数

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

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值