数论函数
数论函数的定义
数论函数指定义域为正整数集的函数
积性函数
定义
积性函数:当 \(a\),\(b\) 互质,\(f(ab)=f(a)f(b)\)
完全积性函数:对于任意 \(a\),\(b\),\(f(ab)=f(a)f(b)\)
常见的数论函数
欧拉函数:\(\varphi(n)\)计算 \(1\) ~ \(n\) 中与 \(n\) 互质的数的个数。
莫比乌斯函数:
\[\mu(n)=\begin{cases}
1 &n=1 \\
(-1)^s &n=p_1*p_2*...*p_s \\
0 &others
\end{cases}\]
\(\epsilon(n) = \begin{cases} 1 &n=1 \\ 0 &n\geq1 \end{cases}\)\( \)
\(I(n)=1\)
单位函数:\(Id(n)=n\)
幂函数:\(Idk(n)=n^k\)
\(d(n)\):正因子个数
\(\delta(n)\):正因子之和
欧拉函数
性质
-
\(p\) 为质数,若 \(p\mid n\) 且 \(p^2 \mid n\),则 \(\varphi(n)=\varphi(n / p) * p\)
-
\(p\) 为质数,若 \(p\mid n\) 且 \(p^2 \nmid n\),则 \(\varphi(n)=\varphi(n / p) * (p - 1)\)
-
\((\varphi*I)(n)=n\)
线性筛法
void init() {
phi[1] = 1;
for(int i = 2; i <= n; i++) {
if(!v[i]) prime[++cnt] = i, v[i] = i, phi[i] = i - 1;
for(int j = 1; j <= cnt && i * prime[j] <= n; j++) {
v[i * prime[j]] = prime[j];
if(i % prime[j]) phi[i * prime[j]] = phi[i] * (prime[j] - 1);
else {phi[i * prime[j]] = phi[i] * prime[j]; break;}
}
}
}
莫比乌斯函数
性质
\((\mu*I)(n)=e(n)\)
线性筛法
void init() {
n = 100;
mu[1] = 1;
for(int i = 2; i <= n; i++) {
if(!v[i]) prime[++cnt] = i, v[i] = i, mu[i] = - 1;
for(int j = 1; j <= cnt && i * prime[j] <= n; j++) {
v[i * prime[j]] = prime[j];
if(i % prime[j]) mu[i * prime[j]] = -mu[i];
else {mu[i * prime[j]] = 0; break;}
}
}
}
杜教筛
对于一个数论函数 \(f\),我们要求 \(S(n) = \sum_{i=1}^{n}f(i)\)
想办法构建出 \(S(n)\) 关于 \(S(\lfloor\frac{n}{i}\rfloor)\) 的递推式
对于任意一个数论函数,必满足:
\[\sum_{i=1}^{n}(f*g)(i)=\sum_{i=1}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor)
\]
那么可以得到:
\[S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor)
\]