C++实现找100(任意)以内的质数--非常好的算法

本文深入探讨了使用埃拉托斯特尼筛法寻找指定范围内所有质数的算法实现。通过C++代码详细展示了如何初始化一个比特集来标记质数,并通过筛选过程去除合数,最终输出指定范围内的所有质数数量及具体数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很惊叹!

#include<iostream>
#include<bitset>
#include<cmath>

using namespace std;

int main()
{
	

	const int Max_number =10000    ;
	const int Test_number = static_cast<int>(sqrt(static_cast<double>(Max_number)));
	bitset<Max_number+1> numbers; //101个0


	numbers.set();   //10
	
	//0和1 忽略掉
	numbers[0]=0;
	numbers[1] = 0;
	for (int i = 1; i != Test_number + 1; i++)  //这里可以从2开始循环,不过前面numbers[1]已经是0了,下面的if语句很快就排除了,开始从2循环
	{
		if (numbers[i])
		{
			for (int j = 2 * i; j <=Max_number ; j += i)     //筛选倍数
				numbers.reset(j);
				//numbers[j] = 0;		
		}
		
	}

	cout << endl << Max_number  << "(包括) 以内的质数共有 " << numbers.count() << "个:\n\n";

	//输出所有的质数
	int account = 0;
	for (int i = 1; i <= Max_number; ++i)
	{
		if (numbers[i])
		{
			
			cout << i << " ";
			account++;              //为了更容易观看,每10个数字换行
			if (account % 10 == 0)
				cout << endl;
		}
	}

	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值