C++实现求解10亿以内所有质数的算法
在本文中,我们将介绍一种使用C++编程语言实现的算法,用于计算10亿以内的所有质数。我们不仅会给出完整的源代码,还会提供相应的描述和解释,帮助您更好地理解这个算法的工作原理。
实现算法:
该算法的基本思想是使用埃拉托色尼筛法(Sieve of Eratosthenes)来找到所有小于等于10亿的质数。该算法的大致流程如下:
-
创建一个大小为n+1的布尔数组,其中n为10亿。
-
将数组中的所有元素初始化为true。
-
从2开始,依次将每一个质数的所有倍数标记为false。
-
循环遍历完整个数组,找到未被标记的元素,并将其视为一个质数。
源代码:
#include<iostream>
#include<cstring>
#define MAX 1000000000 //最大值为10^9
using namespace std;
bool prime[MAX+1]; //用布尔数组记录质数
int main(){
memset(prime,true,sizeof(prime)); //数组全部赋值为true
prime[0]=prime[1]=false; //0和1不是质数
for(int i=2;i*i<=MAX;i++){
if(prime[i]){ //判断i是否是质数
for(int j=i*i;j<=MAX;j+=i){
prime[j]=false; //将i的倍数标记为非质