数论函数

数论函数的定义

数论函数指定义域为正整数集的函数

积性函数

定义

积性函数:当 \(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)\):正因子之和

欧拉函数

性质

  1. \(p\) 为质数,若 \(p\mid n\)\(p^2 \mid n\),则 \(\varphi(n)=\varphi(n / p) * p\)

  2. \(p\) 为质数,若 \(p\mid n\)\(p^2 \nmid n\),则 \(\varphi(n)=\varphi(n / p) * (p - 1)\)

  3. \((\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) \]

数论函数

上一篇:模块 - 组件 - 路由 - 服务


下一篇:分支结构