DGF & 杜教筛笔记
狄利克雷生成函数(DGF)
对于无穷序列
f ,定义其狄利克雷生成函数(Dirichlet series generating function,DGF)为:\tilde F(x)=\sum\limits_{i\ge1}\dfrac{f_i}{i^x} 如果序列
f 满足积性:\forall i\bot j,\ f_{ij}=f_if_j ,那么其 DGF 可以由质数幂处的取值表示:\tilde F(x)=\prod\limits_{p\in\mathcal P}\left(1+\frac{f_p}{p^x}+\frac{f_{p^2}}{p^{2x}}+\frac{f_{p^3}}{p^{3x}}+\cdots\right) 对于两个序列
f,g ,其 DGF 之积对应的是两者的狄利克雷卷积序列的 DGF:\tilde F(x)\tilde G(x)=\sum\limits_i\sum\limits_j\dfrac{f_ig_j}{(ij)^x}=\sum\limits_i\frac1{i^x}\sum\limits_{d\mid i}f_dg_{\frac id}
——OI wiki
常见积性函数的 DGF:
| 名称 | 符号 | DGF |
|---|---|---|
| 单位函数 | ||
| / | ||
| 莫比乌斯函数 | ||
| 欧拉函数 | ||
| 幂函数 | ||
| 约数幂函数 | ||
| 无平方因子数 |
其中
常见等式:
结论:
积性函数的狄利克雷卷积仍是积性函数。
积性函数的逆元也是积性函数。
杜教筛
用于解决数论函数前缀和问题。
有:
若求
变形,有:
可以递归求解
注意到
优化,预处理
以
void sieve() {
for(int i=2, j, u; i<=m; ++i) {
if(!notp[i]) pri[++cntp]=i, mu[i]=-1;
for(j=1; (u=pri[j]*i)<=m && i%pri[j]; ++j) notp[u]=1, mu[u]=-mu[i];
if(u<=m) notp[u]=1, mu[u]=0;
}
mu[1]=1;
rep(i, 2, m) mu[i]+=mu[i-1];
}
map<int, int> smu;
int cal_mu(ui n) {
if(n<=m) return mu[n];
if(smu[n]) return smu[n];
int res=1;
for(ui l=2, r; l<=n; l=r+1) res-=((r=n/(n/l))-l+1)*cal_mu(n/l); //整除分块
return smu[n]=res;
}
可以使用 DGF 来推导满足条件的