筛质数

时间:2020-02-01 00:57:16   收藏:0   阅读:100
技术图片
 1 #include <iostream>
 2 using namespace std;
 3 
 4 const int N = 1e6+10;
 5 
 6 int cnt;
 7 int flag[N], prim[N];
 8 //埃式筛法 O(nlog(log(n)))
 9 void get_prime(int n){
10     for(int i = 2;i <= n;++i){
11         if(!flag[i]){//i 没有删除
12             prim[++cnt] = i;//prim里存的是所有质数
13         }
14         //用来删除当前所有质数的倍数
15         for(int j = i+i;j <= n;j += i)
16             flag[j] = true;
17     }
18 }
19 //线性筛法On, 背下来
20 void get_primes(int n){
21     for(int i = 2;i <= n;++i){
22         if(!flag[i])prim[++cnt] = i;
23         for(int j = 1;prim[j] <= n/i;++j){
24             flag[i*prim[j]] = true;
25             if(i % prim[j] == 0)break;
26         }
27     }    
28 }
29 
30 
31 int main(){
32     int n;
33     cin >> n;        
34     get_primes(n);    
35     cout << cnt << endl;
36 }
View Code

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!