数学

参考资料:

卷积与反演-luogu
狄利克雷卷积-知乎
狄利克雷卷积和莫比乌斯反演-知乎
莫比乌斯反演-oiwiki
整除分块-oiwiki

常用积性函数:

单位函数 ε(n) = {1, while n=10, otherwise

幂函数 {Idk(x) = xkId(x) = xk = 11(x) = 1k = 0

除数函数 {σk(n) = Σdn dkσ(n) = Σdn dk = 1d(n) = Σdn 1k = 0

欧拉函数 φ(n) = Σi=2n [ni] = n×Πpn p1p(p{prime})

其中 表示完全积性函数

因为这些都是积性函数,它们都满足 f(1)=1
(我们常用 f,g,h 来代表函数,在本篇中用来表示积性函数较多

狄利克雷卷积

狄利克雷卷积是定义在数论函数间的二元运算。
定义式为:

以下出现的 不是我们常理解的乘,而是卷

(fg)(n) = Σij=n f(i)g(j)

也会写为:

(fg)(n) = Σdn f(d)g(nd)

且若 f,g 是积性函数,则 fg 也是积性函数

特殊函数的卷积:

  1. Idk1 = σk
  2. φ1 = Id
  3. 11 = d

有趣的运算:
σ = Id1 = φ11 = φd

性质:
交换律: fg=gf
结合律: (fg)h=f(gh)
分配律: f(g+h)=fg+fh

分配律只在函数加法下有效

单位元:
(εf)(n) = Σxy=n ε(x)f(y) = f(n) ,所以单位函数 ε 是狄利克雷卷积的单位元

逆元:
fg = ε ,则称 gf狄利克雷逆,记作 f1
一个函数 f 存在狄利克雷逆的充要条件是 f(1)0 ,且一个函数的狄利克雷逆是唯一的。
(fg)1 = f1g1
f 为积性函数的时候,f1 也是积性函数

莫比乌斯反演

这里我们补充一个积性函数:
莫比乌斯函数 μ(n) = {1  n=10  n 含有平方因子(1)k  k  n 
嗯,很复杂,但没关系,我们只要记住它下面这个性质就好:

dnμ(d) = {1n=10n1


Σdnμ(d) = ε(n)
μ1 = ε
这说明,莫比乌斯函数是常数函数 1 的逆,也就是
11 = μ

反演公式:
g=f1gμ=f
展开为:
g(n)=Σdn f(d)  f(n)=Σdn μ(d)g(nd)

反演结论:

  1. [gcd(i,j) = 1] = Σdgcd(i,j) μ(d)
    通过 μ1 = ε 可以快速并简单地证明出这点。
  2. φ=Idμ

线性筛 O(n) 求莫比乌斯函数:

很多积性函数都是可以通过线性筛 O(n) 求出的,只是方法不尽相同
mu[1] = 1;
for(int i = 2; i <= n; ++ i){
	if(!b[i]){
		s[++ tot] = i;
		mu[i] = -1;
	}
	for(int j = 1; j <= tot && i * s[j] <= n; ++ j){
		b[i * s[j]] = 1;
		if(!(i % s[j])){
			mu[i * s[j]] = 0;
			break;
		}
		mu[i * s[j]] = -mu[i];
	}
}

整除分块:

也常被称为数论分块

能用到整除分块的式子形式大抵是这样的:

i=1n ni

在很多数学题中会出现它,且我们用 O(n) 的复杂度去求有时是会超时的,怎么办呢?
通过打表发现许多 ni 的值是相同的,并成一个块状分布。且可以发现对于每一个值相同的块,它最后一个位置为 n/(n/i) ,这样我们就可以 O(n) 计算了

参考代码:

for(int l = 1, r; i <= n; l = r + 1){
	r = (n / (n / l));
	ans += (r - l + 1) * (n / l);
}

有帮助的题:

Crash的数字表格 / JZPTAB

题意:
给定 n,m ,求

i=1ni=1mlcm(i,j)

很明显,推式子:

以下的式子默认 n<=m

i=1nj=1mlcm(i,j)

i=1nj=1mijgcd(i,j)

考虑枚举 gcd(i,j)

i=1nj=1md=1nijd[gcd(i,j)=d]

i,j 同时乘上 d (将 [gcd(i,j)=d] 变为 [gcd(i,j)=1]

d=1ni=1ndj=1mdijd[gcd(i,j)=1]

d=1ni=1ndj=1mddijkgcd(i,j)μ(k)

再次将 i,j 全体乘 k

d=1nk=1ndi=1nkdj=1mkddμ(k)ijk2

d=1ndk=1ndμ(k)k2i=1nkdj=1mkdij

好,让我们猜猜这个式子的计算复杂度是多少。
.
.
.
O(n)
对,O(n) 。因为这个式子可以拆为两个整除分块来做。
直接说可能抽象了,我们再来拆拆式子,设

f(n,m)=k=1nμ(k)k2i=1nkj=1mkij

明显前半部分是可以 O(n) 预处理的,关于后半部分的计算,再设

g(n,m)=i=1nj=1mij

g(n,m)=n(n+1)2×m(m+1)2

于是

f(n,m)=k=1nμ(k)k2g(nk,mk)

呦,整除分块,复杂度 O(n)
再看看原式

d=1ndf(nd,md)

多眼熟,又是整除分块,总体复杂度 O(nn)=O(n)

真tm牛逼(小声bb
posted @   Biuld  阅读(34)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示