积性函数(欧拉,莫比乌斯函数),狄利克雷卷积,莫比乌斯反演,杜教筛

今天终于能将这几者的关系依自己的理解好好写一写了。

积性函数

积性函数:对于任意互质的整数a,b有f(a×b) = f(a)×f(b)的数论函数。
完全积性函数:对于任意的整数a,b有f(a×b) = f(a) × f(b)
常见的积性函数
μ : 莫比乌斯函数 φ : 欧拉函数 ϵ : 单位元函数 i d : 单位函数 I : 恒等函数 σ : 约数和函数 d : 约数个数函数(除数函数) \mu:莫比乌斯函数\\ \varphi:欧拉函数\\ \epsilon:单位元函数\\ id:单位函数\\ I:恒等函数\\ \sigma:约数和函数\\ d:约数个数函数(除数函数)\\ μ:莫比乌斯函数φ:欧拉函数ϵ:单位元函数id:单位函数I:恒等函数σ:约数和函数d:约数个数函数(除数函数)
在这里插入图片描述

  • 较常用的积性函数:
  • 在这里插入图片描述

狄利克雷卷积

  • 先定义数论函数的的加法数乘

加法: ( F + G ) ( i ) = F ( i ) + G ( i ) (F+G)(i) = F(i)+G(i) (F+G)(i)=F(i)+G(i);数乘: ( x F ) ( i ) = x F ( i ) (xF)(i) = xF(i) (xF)(i)=xF(i)

其中F+G表示新函数H(i) = F(i) + G(i)

两个数论函数 F = G F = G F=G的充要条件是 ∀ n ∈ N + , F ( n ) = G ( n ) \forall n \in \mathbb{N^+},F(n) = G(n) nN+F(n)=G(n)

  • 定义数论函数的狄利克雷卷积*如下:

G ( n ) , F ( n ) G(n),F(n) G(n),F(n)是两个数论函数,则其狄利克雷卷积为: T ( n ) = F ( n ) ∗ G ( n ) = ∑ d ∣ n F ( n ) G ( n d ) T(n) = F(n) * G(n) = \sum_{d|n}F(n)G(\frac{n}{d}) T(n)=F(n)G(n)=dnF(n)G(dn)

等价形式: T ( n ) = ∑ i × j F ( i ) G ( j ) T(n) = \sum_{i\times j}F(i)G(j) T(n)=i×jF(i)G(j),这个形式常用于证明某些性质。

  • 定义狄利克雷卷积的逆元

对于 F ( 1 ) ≠ 0 F(1) \neq 0 F(1)=0,都存在 F F F* G = ϵ G = \epsilon G=ϵ,称 G G G F F F的逆元,记作: F − 1 F^{-1} F1

F ( 1 ) ≠ 0 F(1) \neq 0 F(1)=0的原因是: ( F ∗ F − 1 ) ( 1 ) = ∑ i j = 1 F ( i ) F ( j ) − 1 = F ( 1 ) F ( 1 ) − 1 = 1 (F*F^{-1})(1) = \sum_{ij=1}F(i)F(j)^{-1} = F(1)F(1)^{-1} = 1 (FF1)(1)=ij=1F(i)F(j)1=F(1)F(1)1=1,因此 F ( 1 ) ≠ 0 F(1) \neq 0 F(1)=0

  • 可得 μ − 1 = I \mu^{-1} = I μ1=I

证: μ ∗ I = ∑ d ∣ n μ ( n d ) = ∑ d ∣ n μ ( d ) = [ ( n = = 1 ) ] = ϵ \mu * I = \sum_{d|n}\mu(\frac{n}{d}) = \sum_{d|n}\mu(d)=[(n==1)]=\epsilon μI=dnμ(dn)=dnμ(d)=[(n==1)]=ϵ

  • 狄利克雷卷积的性质

F , G F,G F,G是两个积性函数,有:

  • 单位函数的运算: ϵ ∗ F = F \epsilon * F= F ϵF=F
  • F ∗ G F*G FG是积性函数
  • F − 1 F^{-1} F1也是积性函数
  • 交换律: F ∗ G = G ∗ F F*G=G*F FG=GF
  • 结合律: ( F ∗ G ) ∗ H = F ∗ ( G ∗ H ) (F*G)*H=F*(G*H) (FG)H=F(GH)
  • 分配率: ( F + G ) ∗ H = F ∗ H + G ∗ H (F+G)*H = F*H+G*H (F+G)H=FH+GH

莫比乌斯反演

可由狄利克雷卷积得到:

  • G ( n ) = ∑ d ∣ n F ( d ) ⇒ F ( n ) = ∑ d ∣ n G ( d ) μ ( n d ) G(n)=\sum_{d|n}F(d) \Rightarrow F(n) = \sum_{d|n}G(d)\mu(\frac{n}{d}) G(n)=dnF(d)F(n)=dnG(d)μ(dn)

因为有 G = F ∗ I ( ⇐ G ( n ) = ∑ d ∣ n F ( d ) ) G=F*I(\Leftarrow G(n)=\sum_{d|n}F(d)) G=FI(G(n)=dnF(d))
又因为 F = F ∗ ϵ , ϵ = I ∗ μ F=F* \epsilon ,\epsilon=I*\mu F=Fϵ,ϵ=Iμ,
可得: F = F ∗ ϵ = F ∗ I ∗ μ = G ∗ u = ∑ d ∣ n G ( d ) u ( n d ) F=F*\epsilon=F*I*\mu=G*u=\sum_{d|n}G(d)u(\frac{n}{d}) F=Fϵ=FIμ=Gu=dnG(d)u(dn)

  • G ( d ) = ∑ d ∣ n F ( n ) ⇒ F ( d ) = ∑ d ∣ n G ( n ) μ ( n d ) G(d) = \sum_{d|n}F(n)\Rightarrow F(d) = \sum_{d|n}G(n)\mu(\frac{n}{d}) G(d)=dnF(n)F(d)=dnG(n)μ(dn)

也可通过上面得证,具体见:数学/数论专题-学习笔记:莫比乌斯反演

欧拉函数与莫比乌斯函数的关系

  • φ = i d ∗ u = ∑ d ∣ n d μ ( n d ) = ∑ d ∣ n n d μ ( d ) ( 两边除 n ) ⇒ φ ( n ) n = ∑ d ∣ n μ ( d ) d ( 个人感觉还是 φ ( n ) = ∑ d ∣ n d μ ( n d ) 好记 ) \varphi = id * u \\= \sum_{d|n}d\mu(\frac{n}{d}) \\= \sum_{d|n}\frac{n}{d}\mu(d) \\(两边除n)\\ \Rightarrow \frac{\varphi(n)}{n} = \sum_{d|n}\frac{\mu(d)}{d}\\(个人感觉还是\varphi(n)=\sum_{d|n}d\mu(\frac{n}{d})好记) φ=idu=dndμ(dn)=dndnμ(d)(两边除n)nφ(n)=dndμ(d)(个人感觉还是φ(n)=dndμ(dn)好记)
  • φ = i d ∗ μ i d = φ ∗ μ − 1 = φ ∗ I ⇒ n = ∑ d ∣ n φ ( d ) ⇒ φ ( n ) = n − ∑ d ∣ n , d < n φ ( d ) \varphi = id*\mu \\ id=\varphi*\mu^{-1}=\varphi*I \\ \Rightarrow n=\sum_{d|n}\varphi(d)\\ \Rightarrow \varphi(n) = n-\sum_{d|n,d<n}\varphi(d) φ=idμid=φμ1=φIn=dnφ(d)φ(n)=ndn,d<nφ(d)

总结: φ ( n ) = ∑ d ∣ n d μ ( n d ) = n − ∑ d ∣ n , d < n φ ( d ) \varphi(n)=\sum_{d|n}d\mu(\frac{n}{d})= n-\sum_{d|n,d<n}\varphi(d) φ(n)=dndμ(dn)=ndn,d<nφ(d)
and n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d) n=dnφ(d)

杜教筛

用途:可以在低于线性的时间复杂度内求解积性函数的前缀和
时间复杂度 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)
在这里插入图片描述

证明:P4213题解有杜教筛时间复杂度证明

  • 公式(具体推导见数论学习笔记2之杜教筛初探(含例题练习)):
    令 h = f ∗ g , G 为要求的函数 适用条件: ∑ i = 1 n h ( i ) , ∑ i = 1 n f ( i ) 好求 则 ∑ i = 1 n g ( i ) 就可套该公式求出 令 : H ( n ) = ∑ i = 1 n h ( i ) = ∑ i = 1 n ( f ∗ g ) ( i ) 令 : S ( n ) = ∑ i = 1 n g ( i ) 可得 : S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) g ( n d ) f ( 1 ) 令h=f*g,G为要求的函数\\ 适用条件:\sum_{i=1}^{n}h(i),\sum_{i=1}^{n}f(i)好求\\ 则\sum_{i=1}^{n}g(i)就可套该公式求出\\ 令:H(n)=\sum_{i=1}^{n}h(i)=\sum_{i=1}^{n}(f*g)(i)\\ 令:S(n)=\sum_{i=1}^{n}g(i)\\ 可得:S(n) = \frac{H(n) - \sum_{d=2}^{n}f(d)g(\frac{n}{d})\\}{f(1)} h=fgG为要求的函数适用条件:i=1nh(i),i=1nf(i)好求i=1ng(i)就可套该公式求出:H(n)=i=1nh(i)=i=1n(fg)(i):S(n)=i=1ng(i)可得:S(n)=f(1)H(n)d=2nf(d)g(dn)

  • 应用

  • ∑ i = 1 n φ ( i ) \sum_{i=1}^{n}\varphi(i) i=1nφ(i)

因为: i d = φ ∗ I id = \varphi * I id=φI
则令 g = φ , f = I , h = i d g = \varphi,f = I,h=id g=φ,f=I,h=id
带入上式得:
S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) g ( n d ) f ( 1 ) = n ( n + 1 ) 2 − S ( n d ) 1 = n ( n + 1 ) 2 − S ( n d ) S(n) = \frac{H(n) - \sum_{d=2}^{n}f(d)g(\frac{n}{d})\\}{f(1)}\\ = \frac{\frac{n(n+1)}{2}-S(\frac{n}{d})}{1}\\=\frac{n(n+1)}{2}-S(\frac{n}{d}) S(n)=f(1)H(n)d=2nf(d)g(dn)=12n(n+1)S(dn)=2n(n+1)S(dn)

  • ∑ i = 1 n μ ( i ) \sum_{i=1}^{n}\mu(i) i=1nμ(i)

因为: ϵ = μ ∗ I \epsilon = \mu * I ϵ=μI
则令 g = μ , f = I , h = ϵ g = \mu,f = I,h=\epsilon g=μ,f=I,h=ϵ
带入上式得:
S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) g ( n d ) f ( 1 ) = 1 − S ( n d ) 1 = 1 − S ( n d ) S(n) = \frac{H(n) - \sum_{d=2}^{n}f(d)g(\frac{n}{d})\\}{f(1)}\\ = \frac{1-S(\frac{n}{d})}{1}\\=1-S(\frac{n}{d}) S(n)=f(1)H(n)d=2nf(d)g(dn)=11S(dn)=1S(dn)

Code板子

线性筛法求积性函数

在这里插入图片描述

1. 积性函数
//d(n):n正因子个数 -- d(nm) = d(n) * d(m);n,m需要互质;
const int N = 1e7 + 10;
int primes[N], tot, d[N], cnt[N];
bool st[N];

int calc_d(int x, int k)
{
	int res = 1;
	while(k)
	{
		if(k & 1) res = res * x;
		x *= x;
		k >>= 1;
	}
	
	int ans = 0;
	for(int i = 1; i <= res / i; i ++)
		if(res % i == 0) 
		{
			ans ++;
			if(res / i != i) ans ++;
		}
	return ans;
}

void init()
{
	d[1] = 1;
	for(int i = 2; i < N; i ++)
	{
		if(!st[i]) primes[tot ++] = i, d[i] = 2, cnt[i] = 1;
		for(int j = 0; primes[j] * i < N; j ++)
		{
			st[primes[j] * i] = true;
			if(i % primes[j] == 0)//pj之前已经是i的质因子了
			{
				cnt[i * primes[j]] = cnt[i] + 1;
				//先将pj对d[i]的贡献去掉,此时i(去掉pj贡献)与pj互质,可以使用积性函数的性质求d[i*pj]
				d[i * primes[j]] = d[i] / calc_d(primes[j], cnt[i]) * calc_d(primes[j], cnt[i] + 1);
				break;
			}
			cnt[i * primes[j]] = 1;
			d[i * primes[j]] = d[i] * 2;
		}
	}
}

2.完全积性函数
/*
f(n) = n ^ N --> f(nm) = (nm)^ N = n^N * m^N = f(n)(m)
故f(n)为积性函数(n,m不需要互质)

int(1e6) = 4M char(1e6) = 1M 
*/

const int N = 2e7, mod = 1e9 + 7;
LL primes[N], tot, f[N], n;
bool st[N];

LL calc_f(LL x)
{
	LL res = 1, k = n;
	while(k)
	{
		if(k & 1) res = res * x % mod;
		x = (LL)x * x % mod;
		k >>= 1;
	}
	return res % mod;
}

void init()
{
	f[1] = 1;
	for(int i = 2; i <= n; i ++)
	{
		if(!st[i]) primes[tot ++] = i, f[i] = calc_f(i);
		for(int j = 0; (LL)primes[j] * i <= n; j ++)
		{
			st[i * primes[j]] = true;
			//f(nm) = f(n)f(m)不需要互质,就不用分开计算f(i * pj)
			f[i * primes[j]] = (LL)f[i] * f[primes[j]] % mod;
			
			if(i % primes[j] == 0) break;
		}
	}
}

杜教筛板子

const int N = 1e7 + 10;
LL primes[N], tot, mu[N], phi[N];//积性函数都可以用线性筛算
bool st[N];
unordered_map<int, LL> ans_mu, ans_phi;

void init()
{
	mu[1] = phi[1] = 1;
	for(int i = 2; i < N; i ++) 
	{
		if(!st[i]) primes[tot ++] = i, mu[i] = -1, phi[i] = i - 1;
		for(int j = 0; primes[j] * i < N; j ++)
		{
			st[i * primes[j]] = true;
			if(i % primes[j] == 0) 
			{
				phi[i * primes[j]] = phi[i] * primes[j];
				mu[i * primes[j]] = 0;
				break;
			}
			mu[i * primes[j]] = -mu[i];
			phi[i * primes[j]] = phi[i] * (primes[j] - 1);
		}
	}
	for(int i = 2; i < N; i ++) mu[i] += mu[i - 1], phi[i] += phi[i - 1];
}

LL calc_mu(LL x)//求莫比乌斯函数前缀和
{
	if(x < N) return mu[x];//预处理
	if(ans_mu[x]) return ans_mu[x];//记忆化
	
	LL res = 1;
	for(LL l = 2, r; l <= x; l = r + 1)
	{
		r = x / (x / l);
		res -= (r - l + 1) * calc_mu(x / l);
	}
	ans_mu[x] = res;
	return res;
}

LL calc_phi(LL x)//求欧拉函数前缀和
{
	if(x < N) return phi[x];//预处理
	if(ans_phi[x]) return ans_phi[x];//记忆化
	
	LL res = 1ll * x * (x + 1) / 2;
	for(LL l = 2, r; l <= x; l = r + 1)
	{
		r = x / (x / l);
		res -= (r - l + 1) * calc_phi(x / l);
	}
	ans_phi[x] = res;
	return res;
}

参考

数论学习笔记2之杜教筛初探(含例题练习)
浅谈一类积性函数的前缀和
数学/数论专题-学习笔记:狄利克雷卷积
数学/数论专题-学习笔记:莫比乌斯反演
数学/数论专题:莫比乌斯函数与欧拉函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值