莫比乌斯反演
莫比乌斯函数定义
性质
- 莫比乌斯函数不仅是积性函数,还有如下性质:
即
补充结论
反演结论:
利用
线性筛
- 由于
是积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法可能不同)
// C++ Version
void getMu() {
mu[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!flg[i]) p[++tot] = i, mu[i] = -1;
for (int j = 1; j <= tot && i * p[j] <= n; ++j) {
flg[i * p[j]] = 1;
if (i % p[j] == 0) {
mu[i * p[j]] = 0;
break;
}
mu[i * p[j]] = -mu[i];
}
}
}
扩展
证明:
对于欧拉函数有一个性质,
那么以狄利克雷卷积的形式写出来,
两边同时卷上
莫比乌斯变换
设
形式一:
-
如果有
,那么有 -
这种形式下,数论函数
称为数论函数 的莫比乌斯变换,数论函数 称为数论函数 的逆莫比乌斯变换(反演) -
数论函数的
的莫比乌斯变换就是
形式二:
- 如果有
,那么
证明:
- 对于
,带入 ,然后变换求和顺序,最后通过 来变换
问题形式
- 首先可以将这个拆成四个前缀,那么我们要求的就是
- 最后的实际上是有关
,那么就可以整除分块了
- 首先肯定可以变成这样
- 还是考虑枚举
,那么最后会变成 - 注意到这里的含义是
中和 互质的数的和,而 也是 的一个因子,那么就等价于 - 仍然是注意到上面的含义,有关
中和 互质的数的和,互质的数是一对对的,如果 和 互质,那么 一定和 互质,所以这个和就是 - 那么答案就是
- 第一种方法是
预处理出所有范围内的值,因为 - 第二种方法是线性筛出来所有的
,注意到这个函数是个积性函数,而大部分的积性函数是可以做到线性筛的 - 下面进行推导
- 假设
,那么 - 那么
- 设
,那么 - 同理有
- 那么
参考:
void solve() {
g[1] = 1;
for (int i = 2; i <= N; ++i) {
if (!flg[i]) {
p[++tot] = i;
g[i] = (long long)1 * i * (i - 1) + 1;
}
for (int j = 1; j <= tot && i * p[j] <= N; ++j) {
flg[i * p[j]] = 1;
if (i % p[j] == 0) {
g[i * p[j]] =
g[i] + (g[i] - g[i / p[j]]) * p[j] * p[j]; // 代入推出来的式子
break;
}
g[i * p[j]] = g[i] * g[p[j]];
}
}
}
- 如果已经确实是积性函数了,那么就考虑最小质因数的个数 >=2 的情况就可以了
- 大概的步骤:
- 首先求出质数的幂的答案
- 然后设
- 那么
- 那么
- 然后算出
- 算出
- 两个式子相互推一下,就可以得到
的表示式
- 欧拉函数有一个性质
,质数的表示式是可以变换的,所以这里先求出质数的答案
P1829 [国家集训队]Crash的数字表格 / JZPTAB
- 首先变成
- 将后面的部分提取出来,
- 这个东西还是考虑变换,也就是变成
- 仍然将后面的部分提出来,
,就是 - 那么再放回去,就会发现就是数论分块套数论分块,那么整体的复杂度
- 我一开始还以为要
线性筛函数,然后就越来越跑偏
- 首先要知道
- 先推出这样个式子:
- 将后面的提出来,就是
- 那么
预处理出 - 那么原式子就可以在
做完
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】