线性筛--如何线性求约数个数
线性筛--如何线性求约数个数 线性筛1654948748 我已经掌握埃氏筛了 为什么还要学线性筛??? 线性筛的时间复杂度是严格 O ( N ) O(N) 的, 而埃氏筛的复杂度是 O ( N ∗ l o g 2 ( l o g 2 ( N ) ) O(N∗log2(log2(N)) 看上去并没有快多少 实际也是 , 但在处理一些大数据时,差距就凸显出来了 算法思路 概述: 和埃氏筛类似的 线性筛是通过枚举到的当前数字乘以某个比该数的最小质因子还小的质数来筛的 (上面这句话有点长, 需要反复理解 暂时不能理解,也没关系,等下代码中我会详细讲的 ) 这样就可以保证每次几乎不会出现重筛的情况,大大减少了循环次数 代码: #include<bits/stdc++.h> using namespace std; #define re register #define ll long long #define in inline #define get getchar() int read() { int t=0; char ch=get; while(ch<'0' || ch>'9') ch=get; while(ch<='9' && ch>='0') t=t*10+ch-'0',ch=get; return t; } const int _=1e7+6; int prime[_],