过了这么久,今天来重温一下这个知识点 。
前置芝士
容斥函数((mu)):正版
积性函数((phi)):经常用到
正题
三个等式
[mu * I = epsilon
]
[phi * I = id
]
[mu * id = phi
]
其中 (I(n) = 1),(id(n) = n),(epsilon(n) = left{ egin{array}{**lr**} 1, ~~n = 1 \ 0, ~~n ot= 1 end{array} ight.) 。
得
[epsilon(n) = sum_{d mid n}mu(d) * I(frac{n}{d}) = sum_{d mid n}mu(d)
]
[id(n) = sum_{d mid n}phi(d) * I(frac{n}{d}) = sum_{d mid n}phi(d) = n
]
[phi(n) = sum_{d mid n}mu(d) * id(frac{n}{d})
]
满足交换律,结合律,分配率 。
经典问题
问题 1
给定 (N),(M),求
[sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j)
]
解法(推式子)
将
[sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j)
]
- 变形
[sum^{N}_{i = 1} sum^{M}_{j = 1} id[ ext{gcd}(i, ~j)]
]
- 增加枚举变量
[sum^{N}_{i = 1} sum^{M}_{j = 1} sum_{d mid ext{gcd}(i, ~j)} phi(d)
]
- 交换枚举顺序
[sum^{ ext{min}(N, ~M)}_{d = 1} sum^{lfloor frac{N}{d}
floor}_{i = 1} sum^{lfloor frac{M}{d}
floor}_{j = 1} phi(d)
]
-
(d) 是 (i, ~j) 的 ( ext{gcd}) 的因子,因此 (d) 也是 (i, ~j) 的因子,(i, ~j) 是 (d) 的倍数 。因为 ( ext{gcd}(i, ~j)) 的最大值为 ( ext{min}(i, ~j)),所以 (d) 的最大值为 ( ext{min}(i, ~j)) 。
-
将 (d) 提前后,(i, ~j) 的枚举意义不再是枚举数字的值,而是枚举 (d) 出现的次数,即原数字 (i, ~j) 是 (d) 的倍数的次数,因此 (N, ~M) 除 (d) 并向下取整 。
- 删除无用变量
[sum^{ ext{min}(N, ~M)}_{d = 1} lfloor frac{N}{d}
floor lfloor frac{M}{d}
floor phi(d)
]
接下来用筛法求 (phi) 就好了 。
问题 2
给定 (N),(M),(K),求
[sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j) = K
]
解法
让
[sum^{N}_{i = 1} sum^{M}_{j = 1} ext{gcd}(i, ~j) = K
]
先变形
[sum^{frac{N}{K}}_{i = 1} sum^{frac{M}{K}}_{j = 1} ext{gcd}(i, ~j) = 1
]
众所周知,两个数同时除去它们的 ( ext{gcd}) 后,剩下的两个数互质,因此令 (N, ~M) 除 (K),求 (i, ~j) 的互质对数 。
接下来再变形
[sum^{frac{N}{K}}_{i = 1} sum^{frac{M}{K}}_{j = 1} epsilon[ ext{gcd}(i, ~j)]
]
剩下的步骤就与上一个问题步骤一样了 。
最后
莫反的题都比较板,就是有点费脑子与头发,不过这问题不大,可以自己到洛谷找题,反正裸题重题一大堆,都是经验哦 。
祝您 RP++,AK NOI!!