码迷,mamicode.com
首页 > 其他好文 > 详细

素数筛

时间:2019-07-24 22:26:07      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:i++   log   oid   prim   nlog   整数   nlogn   style   col   

1. 思路:对于不超过n的每个非负整数p(>=2),删去除1*p外所有倍数,处理完所有数后还剩下的就是素数。

1 void prime() //复杂版
2 {
3     mem(vis); //是否被删去
4     for(int i=2;i<=n;i++)
5         for(int j=i*2;j<=n;j+=i)
6             vis[j]=1;
7 }
1 void prime() //优化版
2 {
3     int m=sqrt(n+0.5);
4     mem(vis); //是否被删去
5     for(int i=2;i<=m;i++)
6         if(!vis[i])  //用素数筛
7             for(int j=i*i;j<=n;j+=i) //防止重复筛
8                 vis[j]=1;
9 }

2. 复杂度:内层循环次数是 ⌊n/i⌋ - 1< n/i,O(nlogn)

3. tips:①素数定理 --- Π(x) ~ x/lnx, 即不超过x的素数个数与x/lnx比较接近

素数筛

标签:i++   log   oid   prim   nlog   整数   nlogn   style   col   

原文地址:https://www.cnblogs.com/XXrll/p/11241125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!