狄利克雷卷积学习记录

狄利克雷卷积是函数之间的一种运算

定义 ο \omicron ο运算表示狄利克雷卷积

h ( n ) = g ( n )    ο    f ( n ) h(n)=g(n)\;\omicron\;f(n) h(n)=g(n)οf(n),可读作"g 卷 f"

其含义为 h ( n ) = ∑ d ∣ n g ( d ) f ( n d ) h(n)=\sum_{d\mid n}g(d)f(\frac{n}{d}) h(n)=dng(d)f(dn)

狄利克雷卷积的性质:

狄利克雷卷积满足交换律,结合律,分配率,即 :
h ( n )    ο    f ( n ) = f ( n )    ο    h ( n ) h(n)\;\omicron\;f(n)=f(n)\;\omicron\; h(n) h(n)οf(n)=f(n)οh(n)

h ( n )    ο    f ( n )    ο    g ( n ) = h ( n )    ο    ( f ( n )    ο    g ( n ) ) h(n)\;\omicron\;f(n)\;\omicron\;g(n)=h(n)\;\omicron\;(f(n)\;\omicron\;g(n)) h(n)οf(n)οg(n)=h(n)ο(f(n)οg(n))

( h ( n ) + f ( n ) )    ο    g ( n ) = h ( n )    ο    g ( n ) + f ( n )    ο    g ( n ) (h(n)+f(n))\;\omicron\;g(n)=h(n)\;\omicron\;g(n)+f(n)\;\omicron\;g(n) (h(n)+f(n))οg(n)=h(n)οg(n)+f(n)οg(n)

狄利克雷卷积的另一个性质是,两个积性函数的狄利克雷卷积也是积性函数,即
n = p × q n=p\times q n=p×q,且 p 与 q 互质,假如

f ( n ) = f ( p ) × f ( q ) f(n)=f(p)\times f(q) f(n)=f(p)×f(q)

g ( n ) = g ( p ) × g ( q ) g(n)=g(p)\times g(q) g(n)=g(p)×g(q)

h ( n ) = g ( n )    ο    f ( n ) h(n)=g(n)\;\omicron\;f(n) h(n)=g(n)οf(n)

那么 h ( n ) = h ( p ) × h ( q ) h(n)=h(p) \times h(q) h(n)=h(p)×h(q)

常见的狄利克雷卷积

莫比乌斯函数 μ ( x ) \mu(x) μ(x)
μ ( x ) = { 1 n = 1 ( − 1 ) k n 无 平 方 因 数 , 且 n = ∏ i = 1 k p i 0 其 他 情 况 \mu(x) = \left\{ \begin{array}{lr} 1 & n=1\\ (-1)^k & n无平方因数,且n=\prod_{i=1}^{k}{p_i}\\ 0 & 其他情况 \end{array} \right. μ(x)=1(1)k0n=1nn=i=1kpi
设函数 I ( n ) = 1 , e ( n ) = [ n = 1 ] , i d ( n ) = n ; I(n)=1,e(n)=[n=1],id(n)=n; I(n)=1,e(n)=[n=1],id(n)=n;其中[]表示括号内条件成立为1,否则为0
则有四个常见的性质

1: i d = φ    ο    I id=\varphi\;\omicron\;I id=φοI
展开得 n = ∑ d ∣ n φ ( d ) n=\sum_{d\mid n}{\varphi(d)} n=dnφ(d),这是欧拉函数的一个重要性质,因此得证

2: e = μ    ο    I e=\mu\;\omicron\;I e=μοI
这个式子ldy大佬讲的时候说,这个不好证,记住就行了

3:任何函数和e做狄利克雷卷积,值都不变
自己展开就得证了

4: φ = i d    ο    μ \varphi=id\;\omicron\;\mu φ=idομ
证明如下
对于性质二的式子: e = μ    ο    I e=\mu\;\omicron\;I e=μοI
两边同时卷上 φ \varphi φ,则 φ    ο    e = μ    ο    I    ο    φ \varphi\;\omicron\;e=\mu\;\omicron\;I\;\omicron\;\varphi φοe=μοIοφ
因为卷积具有交换律,结合律,所以
φ    ο    e = ( I    ο    φ )    ο    μ \varphi\;\omicron\;e=(I\;\omicron\;\varphi)\;\omicron\;\mu φοe=(Iοφ)ομ
由性质1,性质3得
φ = i d    ο    μ \varphi=id\;\omicron\;\mu φ=idομ,得证

由以上性质可以得出一些其他性质:

5:比如,因为 e = μ    ο    I e=\mu\;\omicron\;I e=μοI
所以 [ n = 1 ] = ∑ d ∣ n μ ( d ) [n=1]=\sum_{d\mid n}{\mu(d)} [n=1]=dnμ(d)
n = g c d ( i , j ) n=gcd(i,j) n=gcd(i,j) 的时候
[ g c d ( i , j ) = 1 ] = ∑ d ∣ g c d ( i , j ) μ ( d ) = ∑ d ∣ i , d ∣ j μ ( d ) [gcd(i,j)=1]=\sum_{d\mid gcd(i,j)}{\mu(d)}=\sum_{d\mid i,d\mid j}{\mu(d)} [gcd(i,j)=1]=dgcd(i,j)μ(d)=di,djμ(d)

6:同理因为 i d = φ    ο    I id=\varphi\;\omicron\;I id=φοI
所以 n = ∑ d ∣ n φ ( d ) n=\sum_{d\mid n}{\varphi(d)} n=dnφ(d)
n = g c d ( i , j ) n=gcd(i,j) n=gcd(i,j)时,
g c d ( i , j ) = ∑ d ∣ g c d ( i , j ) φ ( d ) = ∑ d ∣ i , d ∣ j φ ( d ) gcd(i,j)=\sum_{d\mid gcd(i,j)}{\varphi(d)}=\sum_{d\mid i,d\mid j}{\varphi(d)} gcd(i,j)=dgcd(i,j)φ(d)=di,djφ(d)
这也成为了计算 gcd 的另一种方法,在化简式子时也很常用

莫比乌斯反演

若f,F为任意函数,则
f    ο    I = F f\;\omicron\;I=F fοI=F
所以同时卷上 μ \mu μ
   f ο    I    ο    μ = F    ο    μ \;f\omicron\;I\;\omicron\;\mu=F\;\omicron\;\mu fοIομ=Fομ
   f ο    e = F    ο    μ \;f\omicron\;e=F\;\omicron\;\mu fοe=Fομ
   f = F    ο    μ \;f=F\;\omicron\;\mu f=Fομ

展开就表示为
F ( n ) = ∑ d ∣ n f ( d ) F(n)=\sum_{d\mid n}{f(d)} F(n)=dnf(d)
f ( n ) = ∑ d ∣ n F ( d ) μ ( n d ) f(n)=\sum_{d\mid n}{F(d)\mu(\frac{n}{d})} f(n)=dnF(d)μ(dn)
这就是莫比乌斯反演,若果 ∑ d ∣ n F ( d ) μ ( n d ) \sum_{d\mid n}{F(d)\mu(\frac{n}{d})} dnF(d)μ(dn)很好求,就可以求 f

例题 [NOI2010] 能量采集

洛谷题目传送门
化简一下题意,就是求 ∑ i = 1 n ∑ j = 1 m ( 2 × g c d ( i , j ) − 1 ) \sum_{i=1}^{n}\sum_{j=1}^{m}(2\times gcd(i,j)-1) i=1nj=1m(2×gcd(i,j)1)

那么也就是求出 ∑ i = 1 n ∑ j = 1 m g c d ( i , j ) \sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j) i=1nj=1mgcd(i,j)就可以了

根据上方的性质6,该式子可以化为

∑ i = 1 n ∑ j = 1 m ∑ d ∣ i , d ∣ j φ ( d ) \sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d\mid i,d\mid j}{\varphi(d)} i=1nj=1mdi,djφ(d)
将最后一个 ∑ \sum 提前,得
∑ d m i n ( m , n ) φ ( d ) ∑ d ∣ i n ∑ d ∣ j m 1 \sum_d^{min(m,n)}\varphi(d)\sum_{d\mid i}^n\sum_{d\mid j}^m 1 dmin(m,n)φ(d)dindjm1
将最后一项化简,得
∑ d m i n ( m , n ) φ ( d ) ⌊ n d ⌋ ⌊ m d ⌋ \sum_d^{min(m,n)}\varphi(d)\lfloor \frac{n}{d} \rfloor\lfloor \frac{m}{d} \rfloor dmin(m,n)φ(d)dndm
于是我们预处理处每一个 φ ( d ) \varphi(d) φ(d),就行了
最后把答案乘2,在减去n*m就行了

#include<bits/stdc++.h>
using namespace std;
const long long N = 1e5+7;
long long phi[N],n,m;
void euler(long long n)
{
	for(long long i=1;i<=n;i++)
	phi[i]=i;
	for(long long i=2;i<=n;i++)
	{
		if(phi[i]==i)
		{
			for(long long j=i;j<=n;j+=i)
			phi[j]=phi[j]/i*(i-1);
		}
	}
}
int main()
{
	cin>>n;
	cin>>m;
	euler(min(n,m));
	long long ans=0;
	for(long long i=1;i<=min(n,m);i++)
	{
		ans=ans+phi[i]*floor(n/i)*floor(m/i);
	}
	cout<<2*ans-(m*n);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值