【数学】积性函数(以 P2303 为例)

文章探讨了积性函数的概念,以莫比乌斯函数和欧拉函数为例,证明它们的积性性质,以及如何利用这些性质解决如Longge问题中的求和问题。文中给出了正因子数量和和的积性公式,并展示了在给定整数n的情况下求和gcd(i,n)的时间优化方法。
摘要由CSDN通过智能技术生成

定义:

若函数 f ( x ) f(x) f(x) 满足 ∀ gcd ⁡ ( a , b ) = 1 , f ( a b ) = f ( a ) f ( b ) \forall \gcd(a,b)=1, f(ab)=f(a)f(b) gcd(a,b)=1,f(ab)=f(a)f(b),则函数 f f f 为积性函数。

函数:

  • 莫比乌斯函数 μ ( x ) \mu(x) μ(x) 为积性函数

    证明:令 a = p 1 α 1 p 2 α 2 … p k α k a=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k} a=p1α1p2α2pkαk b = q 1 β 1 q 2 β 2 … q t β t b=q_1^{\beta_1}q_2^{\beta_2}\dots q_t^{\beta_t} b=q1β1q2β2qtβt

    则若 ∃ i , α i ≥ 2 \exist i,\alpha_i\ge 2 i,αi2 ∃ i , β i ≥ 2 \exist i,\beta_i\ge 2 i,βi2,那么 μ ( a ) μ ( b ) = 0 \mu(a)\mu(b)=0 μ(a)μ(b)=0,而 a b ab ab 中也一定存在某个质因子的次数大于等于 2 2 2,所以 μ ( a b ) = 0 \mu(ab)=0 μ(ab)=0,故该情况成立。

    反之,若 ∀ i ∈ [ 1 , k ] , j ∈ [ 1 , t ] , α i = 1 , β j = 1 \forall i\in[1,k],j\in [1,t],\alpha_i=1,\beta_j=1 i[1,k],j[1,t],αi=1,βj=1,则 μ ( a ) = ( − 1 ) k , μ ( b ) = ( − 1 ) t \mu(a)=(-1)^{k},\mu(b)=(-1)^t μ(a)=(1)k,μ(b)=(1)t a b = p 1 p 2 … p k q 1 … q t ab=p_1p_2\dots p_kq_1\dots q_t ab=p1p2pkq1qt,所以 μ ( a b ) = ( − 1 ) k + t = ( − 1 ) k ( − 1 ) t = μ ( a ) μ ( b ) \mu(ab)=(-1)^{k+t}=(-1)^k(-1)^t=\mu(a)\mu(b) μ(ab)=(1)k+t=(1)k(1)t=μ(a)μ(b)

    综上所述, μ ( x ) \mu(x) μ(x) 为积性函数。

  • 欧拉函数 φ ( x ) \varphi (x) φ(x) 为积性函数

    证明: φ ( a ) = a ∏ i = 1 k p i − 1 p i , φ ( b ) = b ∏ i = 1 t q i − 1 q i , φ ( a b ) = a b ∏ i = 1 k p i − 1 p i ∏ i = 1 t q i − 1 q i \varphi(a)=a\prod_{i=1}^k\frac{p_i-1}{p_i},\varphi(b)=b\prod_{i=1}^t\frac{q_i-1}{q_i},\varphi(ab)=ab\prod_{i=1}^k\frac{p_i-1}{p_i}\prod_{i=1}^t\frac{q_i-1}{q_i} φ(a)=ai=1kpipi1,φ(b)=bi=1tqiqi1,φ(ab)=abi=1kpipi1i=1tqiqi1

    为什么 a b ab ab 的分解质因数为: p 1 p 2 … p k q 1 q 2 … q t p_1p_2\dots p_kq_1q_2\dots q_t p1p2pkq1q2qt 呢?为什么不会 ∃ i , j , p i = q j \exist i,j ,p_i=q_j i,j,pi=qj 呢?——答:因为 a a a b b b 互质。

    所以 φ ( a b ) = φ ( a ) φ ( b ) \varphi(ab)=\varphi(a)\varphi(b) φ(ab)=φ(a)φ(b)

  • 最大公因数 gcd ⁡ ( x , n ) \gcd(x,n) gcd(x,n) n n n 固定的情况下,为积性函数

    证明:

    n = p 1 α 1 p 2 α 2 … p k α k , a b = p 1 β 1 p 2 β 2 … p k β k n=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k},ab=p_1^{\beta_1}p_2^{\beta_2}\dots p_k^{\beta_k} n=p1α1p2α2pkαk,ab=p1β1p2β2pkβk
    { a = p 1 θ 1 p 2 θ 2 … p k θ k b = p 1 β 1 − θ 1 p 2 β 2 − θ 2 … p k β k − θ k \begin{cases} &a=p_1^{\theta_1}p_2^{\theta_2}\dots p_k^{\theta_k}\\ &b=p_1^{\beta_1-\theta_1}p_2^{\beta_2-\theta_2}\dots p_k^{\beta_k-\theta_k} \end{cases} {a=p1θ1p2θ2pkθkb=p1β1θ1p2β2θ2pkβkθk

    gcd ⁡ ( a , n ) = p 1 min ⁡ ( θ 1 , α 1 ) p 2 min ⁡ ( θ 2 , α 2 ) … p k min ⁡ ( θ k , α k ) , gcd ⁡ ( b , n ) = p 1 min ⁡ ( β 1 − θ 1 , α 1 ) p 2 min ⁡ ( β 2 − θ 2 , α 2 ) … p k min ⁡ ( β k − θ k , α k ) \gcd(a,n)=p_1^{\min(\theta_1, \alpha_1)}p_2^{\min(\theta_2, \alpha_2)}\dots p_k^{\min(\theta_k, \alpha_k)},\gcd(b,n)=p_1^{\min(\beta_1-\theta_1, \alpha_1)}p_2^{\min(\beta_2-\theta_2, \alpha_2)}\dots p_k^{\min(\beta_k-\theta_k, \alpha_k)} gcd(a,n)=p1min(θ1,α1)p2min(θ2,α2)pkmin(θk,αk),gcd(b,n)=p1min(β1θ1,α1)p2min(β2θ2,α2)pkmin(βkθk,αk)

    由于 a a a b b b 互质,所以必定不存在某个质因子相同,故 ∀ i , θ i = 0   o r   θ i = β i \forall i,\theta_i=0\ \mathrm{or}\ \theta_i=\beta_i i,θi=0 or θi=βi

    则: gcd ⁡ ( a , n ) gcd ⁡ ( b , n ) = p 1 min ⁡ ( α 1 , β 1 ) p 2 min ⁡ ( α 2 , β 2 ) … p k min ⁡ ( α k , β k ) = gcd ⁡ ( a b , n ) \gcd(a,n)\gcd(b,n)=p_1^{\min(\alpha_1,\beta_1)}p_2^{\min(\alpha_2,\beta_2)}\dots p_k^{\min(\alpha_k,\beta_k)}=\gcd(ab,n) gcd(a,n)gcd(b,n)=p1min(α1,β1)p2min(α2,β2)pkmin(αk,βk)=gcd(ab,n)

  • x x x 的正因子的数量 d ( x ) d(x) d(x) 为积性函数

    证明:与欧拉函数比较类似,略。

  • x x x 的正因子之和 σ ( x ) \sigma (x) σ(x) 为积性函数

    证明:

    a = p 1 α 1 p 2 α 2 … p k α k , b = q 1 α 1 q 2 α 2 … q t α t a=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k},b=q_1^{\alpha_1}q_2^{\alpha_2}\dots q_t^{\alpha_t} a=p1α1p2α2pkαk,b=q1α1q2α2qtαt

    则:
    σ ( a ) = ∏ j = 1 k ∑ i = 0 α j p j i , σ ( b ) = ∏ j = 1 t ∑ i = 0 β j q j i , σ ( a b ) = ∏ j = 1 k ∑ i = 0 α j p j i ∏ j = 1 t ∑ i = 0 β j q j i \sigma(a)=\prod_{j=1}^k\sum_{i=0}^{\alpha_j}{p_j}^i,\sigma(b)=\prod_{j=1}^t\sum_{i=0}^{\beta_j}{q_j}^i,\sigma(ab)=\prod_{j=1}^k\sum_{i=0}^{\alpha_j}{p_j}^i\prod_{j=1}^t\sum_{i=0}^{\beta_j}{q_j}^i σ(a)=j=1ki=0αjpji,σ(b)=j=1ti=0βjqjiσ(ab)=j=1ki=0αjpjij=1ti=0βjqji
    注:可以考虑去括号进行理解,每次其实就是在 k k k 个是式子里每一个选择一个质因数的次数。

    所以, σ ( a b ) = σ ( a ) σ ( b ) \sigma(ab)=\sigma(a)\sigma(b) σ(ab)=σ(a)σ(b)

例题精讲:

P2303 [SDOI2012] Longge 的问题

给定一个整数 n n n,你需要求出 ∑ i = 1 n gcd ⁡ ( i , n ) \sum\limits_{i=1}^n \gcd(i, n) i=1ngcd(i,n) 1 ≤ n < 2 32 1\leq n< 2^{32} 1n<232


考虑令 d = gcd ⁡ ( i , n ) d=\gcd(i,n) d=gcd(i,n),然后枚举 d d d,那么 d d d 能作为 i i i n n n 的最大公约数当且仅当 gcd ⁡ ( i d , n d ) = 1 \gcd(\frac{i}{d},\frac{n}{d})=1 gcd(di,dn)=1
∑ i = 1 n gcd ⁡ ( i , n ) = ∑ d ∣ n d ∑ d ∣ i [ gcd ⁡ ( i d , n d ) = 1 ] = ∑ d ∣ n d ∑ i = 1 n d [ gcd ⁡ ( i , n d ) = 1 ] ← 注意:这里的  i  与上式的  i  不同 = ∑ d ∣ n d φ ( n d ) \begin{aligned} &\sum_{i=1}^n\gcd(i,n)\\ =&\sum_{d|n}d\sum_{d|i}[\gcd(\frac{i}{d},\frac{n}{d})=1]\\ =&\sum_{d|n}d\sum_{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]\leftarrow 注意:这里的\ i\ 与上式的\ i\ 不同\\ =&\sum_{d|n}d\varphi(\frac{n}{d}) \end{aligned} ===i=1ngcd(i,n)dnddi[gcd(di,dn)=1]dndi=1dn[gcd(i,dn)=1]注意:这里的 i 与上式的 i 不同dndφ(dn)
这时候,时间复杂度为 O ( n d ( n ) ) O(\sqrt n d(n)) O(n d(n)) d ( n ) d(n) d(n) 表示为 n n n 的约数,已经可以通过本题。

不过,可以做到更好!
∑ d ∣ n d φ ( n d ) = ∑ d ∣ n n d φ ( d ) ← 注意这里的  d  为上式的 n d = ∑ d ∣ n n d d ∏ i = 1 k p i − 1 p i = ∑ d ∣ n n ∏ i = 1 k p i − 1 p i \begin{aligned} &\sum_{d|n}d\varphi(\frac{n}{d})\\ =&\sum_{d|n}\frac{n}{d}\varphi(d)\leftarrow 注意这里的\ d\ 为上式的 \frac{n}{d}\\ =&\sum_{d|n}\frac{n}{d}d\prod_{i=1}^k \frac{p_i-1}{p_i}\\ =&\sum_{d|n}n\prod_{i=1}^k \frac{p_i-1}{p_i}\\ \end{aligned} ===dndφ(dn)dndnφ(d)注意这里的 d 为上式的dndndndi=1kpipi1dnni=1kpipi1
这时候,借鉴一下证明正因子之和为积性函数的思路,可以化简为若干个多项式的乘积:
∏ i = 1 k ( 1 + p i − 1 p i + ⋯ + p i − 1 p i ⏟ α i ) \prod_{i=1}^k(1+\underbrace{\frac{p_i-1}{p_i}+\dots +\frac{p_i-1}{p_i}}_{\alpha_i}) i=1k(1+αi pipi1++pipi1)
其中 p p p α \alpha α n = ∏ i = 1 k p i α i n=\prod_{i=1}^k {p_i}^{\alpha_i} n=i=1kpiαi,式子的含义就是对于每一个约数 d d d,当前 p i p_i pi 不选则对答案的贡献为 1 1 1,反之为 p i − 1 p i \frac{p_i-1}{p_i} pipi1

所以,最终的答案为(不要忘记乘式子前面的 n n n):
n ∏ i = 1 k ( 1 + p i − 1 p i α i ) n\prod_{i=1}^k(1+\frac{p_i-1}{p_i}\alpha_i) ni=1k(1+pipi1αi)
时间复杂度: O ( n ) O(\sqrt n) O(n )


#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

int n;

signed main() {
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	cin >> n;

	int res = n;
	for (int i = 2; i <= n / i; i ++)
		if (n % i == 0) {
			int cnt = 0;
			while (n % i == 0) cnt ++, n /= i;
			res = res / i * (i + (i - 1) * cnt);
		}
	if (n > 1) res = res / n * (2 * n - 1);

	cout << res << endl;

	return 0;
}
  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值