我试图在2 ** 32下打印每个素数。现在,我使用一个布尔向量来构建筛子,然后在筛子后打印出素数。只需要4分钟即可打印出高达10亿次的素数。有没有更快的方法来做到这一点?这里是我的代码找到40亿以下的所有素数的最快方法
#include <iostream>
#include <cstdlib>
#include <vector>
#include <math.h>
using namespace std;
int main(int argc, char **argv){
long long limit = atoll(argv[1]);
//cin >> limit;
long long sqrtlimit = sqrt(limit);
vector<bool> sieve(limit+1, false);
for(long long n = 4; n <= limit; n += 2)
sieve[n] = true;
for(long long n=3; n <= sqrtlimit; n = n+2){
if(!sieve[n]){
for(long long m = n*n; m<=limit; m=m+(2*n))
sieve[m] = true;
}
}
long long last;
for(long long i=limit; i >= 0; i--){
if(sieve[i] == false){
last = i;
break;
}
}
cout << last << endl;
for(long long i=2;i<=limit;i++)
{
if(!sieve[i])
if(i != last)
cout<<i<<",";
else
cout<<i;
}
cout<<endl;
它应该花费超过4分钟*打印*头十亿素数waaaaay。 – Mysticial
我想以最快的方式将跳过你知道黄金的arent所有的数字,例如,数字结尾用'2','4',5''(5)后,'6','8','0 ' – enginefree
我同意@Mysticial它应该超过4分钟(除非你有一台超级计算机)。 – enginefree