小编Nik*_*hil的帖子

埃拉托色尼的 c++ 筛我的代码很慢

我试图找到低于 4 亿的质数,但即使只有 4000 万,我的代码也需要 8 秒才能运行。我究竟做错了什么?

我该怎么做才能让它更快?

#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
int main()
{
    vector<bool> k;                         
    vector<long long int> c;                
    for (int i=2;i<40000000;i++)
    {
        k.push_back(true);                  
        c.push_back(i);
    }

    for ( int i=0;i<sqrt(40000000)+1;i++)                            
    {                                                               
        if (k[i]==true)                                              
       {                                                            
           for (int j=i+c[i];j<40000000;j=j+c[i])                  
           {                                                       
               k[j]=false; 
           }
       }
    }
    vector <long long int> arr;
    for ( int i=0;i<40000000-2;i++)
    {
        if (k[i]==true)
        {
            arr.push_back(c[i]);
        }
    }
    cout << arr.size() << endl ;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ time-complexity sieve-of-eratosthenes

4
推荐指数
1
解决办法
376
查看次数