线性筛法(欧拉筛)
来源:互联网 发布:知豆新能源图片 编辑:程序博客网 时间:2024/06/02 02:02
- 前言
- 正题
- 如何保证
- 证明
- 代码注释
前言
以前学过的Eratosthenes筛法,时间复杂度是
然而对于五千万左右的数据,Eratosthenes就会华丽爆炸。
于是要用更加高级的算法——欧拉筛。
正题
Eratosthenes慢在对于一个合数,它会被所有比它小的质因子筛过。
而欧拉筛则可以保证,每个合数只会被它最小的质因子筛。
这样均摊复杂度为
如何保证
欧拉筛每次用一个数i,和之前晒出的质数相乘来判断合数。
如果
因为
以此均摊复杂度。
证明
代码&注释
#include <iostream>#include <fstream>#define fo(a,b,c) for (a=b; a<=c; a++)#define n 10000000//范围using namespace std;bool print=false;//是否输出int i,j,k;bool f[1000000001];int p[100000001];//质数表,p[0]为长度__attribute__((optimize("-O2")))//O2优化233int main(){ fo(i,2,n)//枚举一个数 { if (!f[i])//如果没有被筛过,说明是质数 p[++p[0]]=i; fo(j,1,p[0])//枚举筛过的质数 { k=i*p[j]; if (k>n) break; f[k]=true; if (!(i%p[j]))//重点优化,防止多筛 break; } } if (!print) return 0; fo(i,1,p[0]) { printf("%10d",p[i],' '); if (!(i%11)) printf("\n"); } return 0;}
阅读全文
1 0
- 线性筛法(欧拉筛)
- 线性筛法(欧拉筛)
- 线性筛(欧拉筛)
- 线性筛(欧拉筛)
- 线性筛法(欧拉筛法)
- 欧拉线性筛质数(线性)
- 欧拉筛(线性筛)& 欧拉函数
- 线性筛法(欧拉筛法)求素数
- 线性筛法
- 线性筛法
- 线性素数筛法
- 线性筛法
- 各种线性筛法
- 线性筛素数法
- 线性筛法
- 浅析线性筛法
- 线性筛法
- 线性筛法
- Unity_物体方向错乱问题与Space的关系与解决方法
- 【算法题】最大乘积
- 本篇文章主要记录如何在CentOS7.0上安装Chrome浏览器。
- linux 编译php扩展 openssl
- windows校准时间,与互联网同步
- 线性筛法(欧拉筛)
- fabric0.6交易处理流程及调用关系分析
- Java接口
- TAOCP中最大公约数算法理解
- 163yum源脱机文件的下载及安装
- 字符串中的字符统计
- JS刷新页面的几种方法
- Java技术常用设计模式(三)--- 模板方法模式
- Sysbench 性能压测及MySQL性能压测