算法学习笔记(24):筛法
1.算法学习笔记(1):CDQ分治2.算法学习笔记(2):分块3.算法学习笔记(3):莫队算法4.算法学习笔记(4):FHQ平衡树(无旋平衡树)5.算法学习笔记(5):AC自动机6.算法学习笔记(6):优秀trick和性质合集7.算法学习笔记(7):数论8.算法学习笔记(9):第k大问题合集9.算法学习笔记(10):各种序的美好性质10.算法学习笔记(11):历史版本和线段树11.算法学习笔记(12):左偏树12.算法学习笔记(13):同余最短路13.算法学习笔记(14):区间最值操作和历史最值问题14.算法学习笔记(15): Splay树15.算法学习笔记(16):Link Cut Tree16.算法学习笔记(17):Slope trick17.算法学习笔记(18):珂朵莉树18.算法学习笔记(20):网络流19.算法学习笔记(21):数论分块20.算法学习笔记(22):莫比乌斯反演21.算法学习笔记(23):杜教筛
22.算法学习笔记(24):筛法
23.暑假集训学习笔记(1):lxl DS Day 124.暑假集训学习笔记(2):lxl DS Day 225.暑假集训学习笔记(3):lxl DS Day 326.多项式笔记27.生成函数笔记28.插头DP29.DP选讲做题记录 by 付乙淼30.拓展摩尔投票31.图论知识总结筛法
埃氏筛
考虑埃氏筛是通过把每个质数的倍数都标记为合数, 这样剩下的数就都是质数。
时间复杂度
bitset<10000000> p;
void Eratosthenes(int n) {
for(int i = 2; i <= n; i++) {
if(!p[i]) prime[++tot] = i;
for(int j = i << 1; j <= n; j += i)
p.set(j, true);
}
}
虽然时间复杂度高于线性, 但是搭配 bitset 效率会比欧拉筛还要优秀!
欧拉筛
欧拉筛时间复杂度
bool p[10000000];
void Euler(int n) {
for(int i = 2; i <= n; i++) {
if(!p[i]) prime[++tot] = i;
for(int j = 1; j <= tot && i * prime[j] <= n; j++) {
p[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
}
}
}
看起来很神奇, 两层 for 循环时间复杂度
正确性证明:
考虑每个合数可以表示成
时间复杂度证明:
考虑每个合数可以表示成
现在我们就是证明是否存在一个
欧拉函数
首先给出公式:
考虑用线性筛。
当
当
代码:
注意
点击查看代码
bool p[10000000];
void Euler(int n) {
phi[1] = 1;
for(int i = 2; i <= n; i++) {
if(!p[i]) prime[++tot] = i, phi[i] = i - 1;
for(int j = 1; j <= tot && i * prime[j] <= n; j++) {
p[i * prime[j]] = 1;
if(i % prime[j] == 0) {
phi[i * prime[j]] = prime[j] * phi[i];
break;
}
else
phi[i * prime[j]] = (prime[j] - 1) * phi[i];
}
}
}
莫比乌斯函数
定义如下:
在用欧拉筛时则有:
证明:
当
当
代码:
注意
点击查看代码
bool p[10000000];
void Euler(int n) {
mu[1] = 1;
for(int i = 2; i <= n; i++) {
if(!p[i]) prime[++tot] = i;
for(int j = 1; j <= tot && i * prime[j] <= n; j++) {
p[i * prime[j]] = 1;
if(i % prime[j] == 0) {
mu[i * prime[j]] = 0;
break;
}
else
mu[i * prime[j]] = -mu[i];
}
}
}
约数个数函数
约数和函数
其他情况就拿通项公式和积性函数算即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App