我試圖在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