积性函数学习笔记
积性函数
定义
积性函数:\(f(x)\) 满足 \(\forall\gcd(a,b)=1,f(ab)=f(a)f(b)\)
若没有 \(\gcd(a,b)=1\) 的性质,则为完全积性函数。
性质
性质1: \(f(x),g(x)\) 是积性函数 \(\implies\) \(f\times g\) 是积性函数,\(f \div g\) 是积性函数
证明略。
性质2: 狄利克雷(Dirichlet)卷积 \(h(n)=f(n) *g(n)=\sum_{d|n}f(d)g(\frac{n}{d})\) 也是积性函数。
证明: 设 \(ab=n\) 且 \(\gcd(a,b)=1\),则我们计算 \(h(n)\):
性质3: 积性函数由 \(f(p^k)\)(\(p\) 为质数)决定。
说明:\(n\) 可以表示成 \(p_1^{k_1}p_2^{k_2}\dots p_m^{k_m}\),所以 \(f(n)\) 可以表示成 \(f(p_1^{k_1})f(p_2^{k_2})\dots f(p_m^{k_m})\)。
欧拉函数
定义
欧拉函数 \(\varphi(n)\) 是最重要的积性函数之一,它等于 \(1\) 到 \(n\) 中与 \(n\) 互质的数的个数。
形式化,\(\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]\)。
性质与一些结论
性质1: \(\varphi(n)\) 是积性函数
证明:
不妨设 \(ab=n\) 且 \(\gcd(a,b)=1\)。
对于每个数 \(i\),我们将它表示成 \((r_1, r_2)\) 的形式,表示存在 \(x,y\) 满足 \(i =ax+r_1=by+r_2\)。
首先我们证明,对于 \(1 \le i \le n\),这个映射是唯一的。
我们将上式变成:\(ax-by=r_2-r_1\)。方便起见,将 \(b\) 取反得 \(ax+by=r_2-r_1\)。
这是一个二元一次不定方程,根据裴蜀定理,\(\gcd(a,b)|r_2-r_1\) 则方程有解。
由于 \(a,b\) 互质,说明方程一定有解。
显然,对于方程的一组解 \((x_0,y_0)\) 来说,我们可以用整数 \(t\) 表示方程的通解:
我们将通解代入 \(i\) 得到:\(i=(ax_0+r_1)+abt\),说明满足条件的 \(i\) 是以 \(ab\) 为周期的。
所以 \(1 \sim ab\) 中恰好有一个 \(i\) 对应 \(r_2-r_1\),得证。
接下来我们证明 \(\varphi(n)=\varphi(a)\varphi(b)\)。
如果一个数 \(x\) 与 \(n\) 互质,那么它必然和 \(a\) 和 \(b\) 也互质。
这意味这如果 \(x\) 表示为 \((r_1,r_2)\),那么必然有 \(r_1\) 与 \(a\) 互质,\(r_2\) 与 \(b\) 互质。反之同理。
所以所有与 \(n\) 互质的数的个数就等于 \((r_1,r_2)(0 \le r_1 < a, 0 \le r_2 < b)\) 且 \(r_1\) 与 \(a\) 互质,\(r_2\) 与 \(b\) 互质的有序数对的个数。
显然,\(r_1\) 有 \(\varphi(a)\) 种取值,\(r_2\) 有 \(\varphi(b)\) 种取值。
所以一共有 \(\varphi(a)\varphi(b)=\varphi(n)\) 种取值,得证。
计算公式: 设 \(n\) 的质因数分解为 \(\prod_{i=1}^kp_i^{k_i}\),则 \(\varphi(n)=n\prod_{i=1}^k\frac{p_i-1}{p_i}\)。
证明:
我们已经证明了 \(\varphi\) 是积性函数,所以我们只要推出 \(\varphi(p^k)\) 就行了。
对于 \(1 \sim p^k\) 来说,只有 \(p\) 的倍数不与 \(p\) 互质。
而 \(p\) 的倍数共有 \(p^{k-1}\) 个,所以 \(\varphi(p^k)=p^k-p^{k-1}\)。
所以 \(\varphi(n)=\prod_{i=1}^k\varphi(p_i^{k_i})=\prod_{i=1}^k(p_i^{k_i}-p_i^{k_i-1})=\prod_{i=1}^kp_i^{k_i-1}(p_i-1)=n\prod_{i=1}^k\frac{p_i-1}{p_i}\)。
结论1: \(\sum_{d|n}\varphi(d)=n\)
证明:
重点在于改变枚举对象,我们枚举每个数 \(i\) 与 \(n\) 的最大公因数 \(d\)。
我们知道:\(\sum_{d|n}\sum_{i=1}^n[\gcd(i,n)=d]=n\)。
这时候我们将 \(d\) 除下去得到:\(\sum_{d|n}\sum_{i=1}^n[\gcd(\frac{i}{d},\frac{n}{d})=1]=n\)。
显然后面的式子就等于 \(\varphi(\frac{n}{d})\),所以有:\(\sum_{d|n}\varphi(\frac{n}{d})=n\)。
将 \(d\) 换成 \(\frac{n}{d}\) 即可得到结论。
结论2: 所有小于等于 \(n\) 且与 \(n\) 互素的正整数之和为 \(\frac{n\varphi(n)}{2}\),(\(n \ge 2\),\(n=1\) 时就是 \(1\))。
证明:
观察不难发现,如果 \(\gcd(x,n)=1\),则 \(\gcd(n-x,n)=1(x < n)\)。
所以我们可以将这 \(\varphi(n)\) 个数两两配对,每一对和为 \(n\),就能得到这个结论。
线性筛
基础不写了,考虑如何求出积性函数 \(f(n)\)。
我们知道,只有在 \(\gcd(a,b)=1\) 时,\(f(n)=f(a)f(b)\)。
但是我们存在一种情况,需要用 \(p\) 和 \(x\) 更新 \(px\),而 \(p\) 是 \(x\) 的因子。
所以我们还要记录两个 \(exp(n)\) 和 \(pw(n)\),其中 \(exp(n)\) 表示 \(n\) 最小的因子 \(p\) 的次数,\(pw(n)\) 表示 \(p^{exp(n)}\)。
当 \(p\) 与 \(x\) 互质时,\(exp(px)=1,pw(px)=p,f(px)=f(p)f(x)\)。
否则,\(exp(px)=exp(p)+1,pw(px)=pw(p)\times p,f(px)=f(pw(x) \times p) \times f(\frac{x}{pw(x)})\)。
这样才能正常的筛。
练习
题目1: 求 \(\sum_{i=1}^n\gcd(i,n)\),\(n < 2^{32}\)(P2303 [SDOI2012] Longge 的问题)
思路:
我们考虑采取桶的思想,明显会有 \(\gcd(i,n) \le n\),所以我们就有:
若 \(\gcd(i,n)=j\),等价于:\(\gcd(\frac{i}{j},\frac{n}{j})=1\)。由于 \(i \le n\),所以 \(\frac{i}{j} \le \frac{n}{j}\)。
所以:
所以原式就等于:
这个形式就是狄利克雷卷积的形式,所以我们如果记 \(f(n)=\sum_{d|n}d\times\varphi(\frac{n}{d})\),则 \(f(n)=id(n)*\varphi(n)\)。
由于 \(id(n)\) 与 \(\varphi(n)\) 都是积性函数,所以 \(f(n)\) 也是积性函数。
根据积性函数的性质,我们只要求出 \(f(p^k)\) 就能求出 \(f(n)\)。
这样 \(f(p^{k})\) 就能快速求出了,所以我们就可以求出 \(f(n)\) 了。
一定注意要把 \(\varphi(1)\) 拎出来单独讨论。
题目2: 求出 \(\sum_{i=1}^n\sum_{j=i}^n\gcd(i,j)\),\(n \le 4 \times 10^6+1\)(拿行李(极限版) GCD - Extreme (II))
思路:
沿用上题结论,我们要求的就是 \(\sum_{i=1}^nf(i)\),由于 \(f(n)\) 是积性函数,所以我们可以用线性筛在 \(O(n)\) 的时间内将每个 \(f(i)\) 求出来,然后就做完了。
题目3: 求 \(\sum_{i=1}^n \operatorname{lcm}(i,n)\)。(P1891 疯狂 LCM)
思路:
我们把 \(\frac{i}{d}\) 换成 \(i\) 就可以得到,再把 \(\frac{n}{d}\) 换成 \(d\) 得到:
而 \(\sum_{i=1}^di[\gcd(i,d)=1]\) 是所有小于等于 \(d\) 且与其互质的数之和。
然后这就是我们之前的结论,这个式子就等于 \(\frac{d\varphi(d)}{2}\),除了 \(d=1\) 时是 \(1\)。
所以式子变为:
我们记 \(f(n)=\sum_{d|n}d \times \varphi(d)\),这个函数虽然不是狄利克雷卷积,但我们可以证明它也是积性函数。
证明类似狄利克雷卷积,这里略过。
于是我们依然可以用 \(f(p^k)\) 来求出 \(f(n)\),然后就做完了。
题目4: 求有多少数对 \((x,y)\) 满足 \(1 \le x,y \le n,\gcd(x,y)=\text{质数}(n \le 10^7)\)。(P2568 GCD)
思路:
设 \(\mathbb{P}\) 为质数集合,答案即为:
我们先考虑后一段:
所以答案就是:
所以我们对 \(\varphi\) 做一个前缀和,再枚举所有素数即可。