线性筛法
来源:互联网 发布:软件可靠性英文 编辑:程序博客网 时间:2024/05/24 01:19
当求质数时,我们用普通筛法,O(n log n)解决,但n很大时,就会爆掉,这时就需要这一种很强大的筛法——线性筛法来解决,所谓线性,就是O(n)咯。
当我们用普通筛法时,要筛掉一个数n,可能会被筛很多次,这就造成了累赘,比如36:
3 * 12时被筛掉一次,18 * 2时被筛掉一次,这样就会有累赘,那么我们想想:我们在枚举j去筛掉i*j 后 ,如果j|i,(显然j是一个质数)的话,就break掉,就可以变成O(n)了,这样显然是可行的:当筛12 * 2后,2|12,break掉,那这样就不会筛12 * 3,当筛18 * 2的时候,才会真正筛掉36,然后break掉。那么我们就得出了线性筛法的框架:
- 假如i没被筛,加入质数表
- 不管i有没有被筛,从小到大枚举质数j,筛掉i*j,然后如果j|i,break。
Codes:
procedure GetPrimes; var i,j:longint;begin for i:=2 to top do //要求2~top的质数 begin if not bz[i] then //加入质数表 begin inc(top); pr[top]:=i; end; for j:=1 to top do //筛掉后面的 begin if pr[j]*i>top then break; bz[pr[j]*i]:=true; if i mod pr[j]=0 then break; //剪掉不必要的 end; end;end;
注:x|y表示y mod x=0。
0 0
- 线性筛法
- 线性筛法
- 线性素数筛法
- 线性筛法
- 各种线性筛法
- 线性筛素数法
- 线性筛法
- 浅析线性筛法
- 线性筛法
- 线性筛法
- 线性筛法
- 求素数: 一般线性筛法 + 快速线性筛法
- 线性筛法 与 线性求欧拉函数 的计算模板
- 线性筛法的应用
- 几种线性筛法
- 线性筛法(欧拉筛法)
- 【线性筛法的应用】
- 线性筛法及扩展
- 简单理解Socket
- OC语言4-内存管理
- Flask Web 开发学习稿(一)
- 6款市面上的采集软件
- JS--时间器控制图片显示
- 线性筛法
- hdu 1532/poj 1273 Drainage Ditches(最大流模板)
- UNIX , LINUX , GNU 相关 | 前言
- windows下安装nginx
- Redis系列-php怎么通过redis扩展使用redis
- Android保存Bitmap到文件
- localStorage的跨域问题解决方案
- android studio 2.2 C++ 支持(CMAKE方法)
- Kafka+Spark Streaming+Redis实时计算整合实践