莫比乌斯反演
Chivas-Regal
# 前置芝士 —— 莫比乌斯函数
# 定义
可以简化为:
在 无平方因数时:
其他情况:
# 性质
正常情况下在 有 数个不同质因子, 有 数个不同质因子时
- 奇, 奇, 的质因子个数 偶,
- 奇, 偶, 的质因子个数 奇,
- 偶, 奇, 的质因子个数 奇,
- 偶, 偶, 的质因子个数 偶,
可以看出莫比乌斯函数是个积性函数
但是特殊情况例如 时
所以莫比乌斯函数不是完全积性函数
# 推论
有两个狄利克雷卷积 (opens new window)出来的推论
(具体证明请看上面的狄利克雷卷积传送门
# 程序
线性筛打表:
const int maxn = 2005;
bool isprime[maxn];
ll mu[maxn];//Mobius函数表
vector<ll> prime;
inline void Mobius(){//线性筛
isprime[0] = isprime[1] = 1;
mu[1] = 1;//特判mu[i] = 1
for(ll i = 2; i <= maxn; i ++){
if( !isprime[i] ) mu[i] = -1, prime.push_back(i);//质数的质因子只有自己,所以为-1
for(ll j = 0; j < prime.size() && i * prime[j] <= maxn; j ++){
isprime[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
mu[i * prime[j]] = -mu[i];//积性函数性质: (i * prime[j])多出来一个质数因数(prime[j]),修正为 (-1) * mu[i]
}
}
//剩余的没筛到的是其他情况,为0
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 概述
# 概念
莫反是一种利用莫比乌斯函数的积性性质,对方程进行计算用时简化的一种方法
# 思想
(上文中性质的利用)
# 反演定理
设有两个方程 和 ,有以下两种反演方式
证明
证明
# 实例
# 题目
UVA10214 《Trees in a Wood.》传送门 (opens new window)
# 思路
与[SDOI2008]仪仗队 (opens new window)很像
在一个象限内
都是让求
所以我们设置
但是因为 比较难求,所以我们同时要设置一个满足 的
由于四个象限 + 四个坐标轴,所以分子为
分母则是所有的树
答案则是 保留 位小数
# 程序
const int maxn = 2005;
bool isprime[maxn];
ll mu[maxn];//Mobius函数表
ll n, m;
vector<ll> prime;
inline void Mobius(){//线性筛
isprime[0] = isprime[1] = 1;
mu[1] = 1;//特判mu[i] = 1
for(ll i = 2; i <= maxn; i ++){
if( !isprime[i] ) mu[i] = -1, prime.push_back(i);//质数的质因子只有自己,所以为-1
for(ll j = 0; j < prime.size() && i * prime[j] <= maxn; j ++){
isprime[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
mu[i * prime[j]] = -mu[i];//积性函数性质: (i * prime[j])多出来一个质数因数(prime[j]),修正为 (-1) * mu[i]
}
}
//剩余的没筛到的是其他情况,为0
}
inline void solve(){
ll res = 0;
for(ll d = 1; d <= MIN(n, m); d ++){
res += mu[d] * (n / d) * (m / d);
}
res = res * 4 + 4;//四个象限 + 坐标轴的四个贡献
ll down = (n * 2 + 1) * (m * 2 + 1) - 1;//分母,矩阵所有树 - 原点
printf("%.7f\n", res * 1.0 / down);
}
int main () {
Mobius();
while(scanf("%lld%lld", &n, &m) == 2, n || m){
solve();
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38