积性函数与狄利克雷卷积
积性函数
【定义】
若对于一个数论函数 \(f\),有:
对 \((a,b)=1\),有 \(f(a\times b) = f(a) \times f(b)\),
称 \(f\) 是一个积性函数。
特别地,若对于任意数 \(a,b\),有 \(f(a\times b)=f(a)\times f(b)\),
称 \(f\) 是一个完全积性函数。
积性函数举例:
欧拉函数,因数个数,因数和 ……
完全积性函数举例:
幂函数 ……
【作用】
这说明,\(f(a\times b)\) 是可以被 \(f(a)\) 和 \(f(b)\) 递推出来的。
欧拉函数的递推代码:
int pr[N], cnt = 0;
bool f[N] = {};
int phi[N] = {};
void init() {
memset(f, true, sizeof f);
f[0] = f[1] = false;
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (f[i]) {
pr[++cnt] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= cnt && pr[j] * i <= n; j++) {
//此时pr[j]就是pr[j]*i的最小质因数
f[pr[j] * i] = false;
if (i % pr[j])
phi[pr[j] * i] = phi[pr[j]] * phi[i];
else
phi[pr[j] * i] = phi[i] * pr[j];
if (i % pr[j] == 0)
break;
}
}
}
狄利克雷卷积
设 \(f,g\) 是两个数论函数,则它们的狄利克雷卷积 \((f*g)(n)=\displaystyle \sum_{d|n}f(d)\times g(\frac{n}{d})\)。
性质:若 \(f,g\) 为积性函数,则 \(f*g\) 仍为积性函数。
证明:设 \(ab=n,(a,b)=1\),记 \(h=f*g\)。
\[h(n)=h(ab)=\displaystyle\sum_{d|ab}f(d)\times g(\frac{ab}{d})
\]
\[=\displaystyle\sum_{d_1|a,d_2|b}f(d_1d_2)\times g(\frac{ab}{d_1d_2})
\]
注意到因为 \((a,b)=1\),所以 \((d_1,d_2)=1\),这就可以利用积性函数的性质了。
\[\displaystyle=\sum_{d_1|a}f(d_1)\times g(\frac{a}{d_1})\sum_{d_2|b}f(d_2)\times g(\frac{b}{d_2})
\]
\[=h(a)\times h(b)
\]
证毕。
推论:\(f(n)=f(p_1^{a_1})f(p_2^{a_2})\cdots f(p_k^{a_k})\),即 \(n\) 的分解形式。