【笔记】莫比乌斯反演
0 约定
1 数论分块
形如
可以在
1.1 解法
-
对于
,显然,
最多 种取值,故而 最多有 种取值。 -
对于
,有
,最多亦有 种取值。
综上,如果可以
具体代码如下:
int res = 0;
for (int i = 1, j; i <= n; i = j+1) {
j = n/(n/i);
res += (f(j) - f(i-1)) * g(n/i);
}
其中
2 莫比乌斯函数
对于一些函数
2.1 定义
定义莫比乌斯函数:
注:
- 「含有平方因子」是指存在
为质数, 为满足 的最大整数, 。eg. 。
2.2 性质
-
是 不完全 积性函数,即 当且仅当 。 -
狄利克雷卷积 相关:
-
证明与下类似。
-
证明:
设:
, 为质数, 为正整数。
-
3 求莫比乌斯函数
3.1
线性质数筛(欧拉筛)的一大优势在于我们可以知道每个数的 最小质因子,从而通过递推线性求解 积性函数。
void init (int _n) {
for (int i = 2; i <= _n; i++) is_prime[i] = 1;
mu[1] = 1;
for (int i = 2; i <= _n; i++) {
if (is_prime[i])
prime.push_back(i),
mu[i] = -1;
for (int j : prime) {
if (1ll*i*j > _n) break;
is_prime[i*j] = 0;
if (i%j == 0) {
mu[i*j] = 0;
break;
}
mu[i*j] = -mu[i];
}
}
}
3.2
mu[1] = 1;
for (int i = 1; i <= n; i++)
for (int j = i+i; j <= n; j += i)
mu[j] -= mu[i];
证明是显然的:
4 莫比乌斯反演
设两个个数论函数
则有:
5 例题
5.1 简单的数学题
5.1.1 Description
已知:
。 求:
感性感知一下,
设:
答案即为
下考虑求解
从而:
推柿子:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int lim = 1e7;
int mu[lim+5], phi[lim+5];
bool is_prime[lim+5];
vector<int> prime;
ll _S[lim+5], inv2, inv6, ans, p, n;
unordered_map<ll, ll> S;
ll qpow (ll a, ll b) {
ll res = 1;
for (; b; b >>= 1, (a *= a) %= p)
if (b & 1) (res *= a) %= p;
return res;
}
void init (int _n) {
for (int i = 2; i <= _n; i++) is_prime[i] = 1;
phi[1] = 1;
mu[1] = 1;
for (int i = 2; i <= _n; i++) {
if (is_prime[i])
prime.push_back(i),
phi[i] = i-1,
mu[i] = -1;
for (int j : prime) {
if (1ll*i*j > _n) break;
is_prime[i*j] = 0;
if (i%j == 0) {
phi[i*j] = j * phi[i];
mu[i*j] = 0;
break;
}
phi[i*j] = phi[j] * phi[i];
mu[i*j] = -mu[i];
}
}
for (int i = 1; i <= _n; i++)
_S[i] = (_S[i-1] + 1ll*i*i%p * phi[i]%p) % p;
}
ll F1 (ll x) { return x%=p, x*(x+1)%p*inv2%p; }
ll F2 (ll x) { return x%=p, x*(x+1)%p*(x*2+1)%p*inv6%p; }
ll F3 (ll x) { return x%=p, F1(x) * F1(x) % p; }
ll solve (ll x) {
if (x <= lim) return _S[x];
if (S[x]) return S[x];
ll res = F3(x);
for (ll i = 2, j; i <= x; i = j+1) {
j = x/(x/i);
res = (res - solve(x/i) * (F2(j) - F2(i-1) + p) % p + p) % p;
}
return S[x] = res;
}
int main () {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> p >> n;
inv2 = qpow(2, p-2), inv6 = qpow(6, p-2);
init(lim);
for (ll i = 1, j; i <= n; i = j+1) {
j = n/(n/i);
(ans += F1(n/i) * F1(n/i)%p * ((solve(j) - solve(i-1)+p)%p) % p) %= p;
}
cout << ans;
return 0;
}
5.2 【模板】杜教筛
5.3 YY的GCD
分类:
数学 / 数论
, 数学 / 反演 / 莫比乌斯反演
标签:
笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】