数论 学习笔记

我是蒻蒻。

数论分块

解决形如 \(\displaystyle\sum_{i=1}^nf(i)g(\lfloor \frac{n}{i}\rfloor)\) 形式的问题。最基础的就是调和级数\(\displaystyle\sum_{i=1}^n\lfloor \frac{n}{i}\rfloor\)

发现 \(g\) 的函数图像是一个下降的双曲线,我们可以将相同值分成同一块,快速计算同一块的贡献。

记录函数 \(D(n) 表示 \lfloor \frac{n}{i}\rfloor\) 的取值集合,我们发现以下性质:

::::info[性质一]
\(|D(n)|\le 2\sqrt{n}\)。对于 \(i\) 讨论与 \(\sqrt{n}\) 的大小关系即可证明。

::::

::::info[性质二]
\(|D(n)|=\lfloor\sqrt{4n+1}\rfloor-1\)
::::

::::info[性质三]
单个块 \(i\) 的左右端点为 \(\lfloor \frac{n}{i+1}\rfloor+1\)\(\lfloor \frac{n}{i}\rfloor\)

同时我们发现 \(R=\lfloor \frac{n}{\lfloor \frac{n}{i}\rfloor} \rfloor\)
::::

::::info[性质四]
\(m\in D(n)\)\(D(m)\in D(n)\) 的充要条件。
::::

通过性质三,我们可以快速处理相同块,结合性质一保证时间复杂度为根号级别。

狄利克雷卷积 (Dirichlet 卷积)

Dirichlet 卷积是一种在数论函数之间的二元运算。

\((f*g)(n)=\displaystyle\sum_{ij=n}f(i)g(j)\)

同理,\((f*g)(n)=\displaystyle\sum_{d|n}f(d)g(\frac{n}{d})\)

不一样的是,\((f+g)(n)=f(n)+g(n)\)

我们定义一些常用的数论符号:

单位函数 \(\varepsilon(n)\),当 \(n\) 值为 \(1\),否则为 \(0\)

幂函数 \(\mathrm{Id}_k(n)=n^k\)

除数函数 \(\sigma_k(n)=\displaystyle\sum_{d|n}d^k\)

欧拉函数 \(\varphi(n)\) 表示 \(1\sim n\) 中与 \(n\) 互质的数的个数。

上面的函数都是积性函数,可以使用 Dirichlet 卷积转化。

重要的是,有等式 \((f*1)(n)=\displaystyle\sum_{d|n}f(d)\)

同时 Dirichlet 卷积满足:交换律,结合律,分配律,单位元,逆元。

前四个直接拆拆贡献,这里我们说说逆元。

::::info[Dirichlet 逆元]
我们定义 \(g=f^{-1}\),使得 \((f*g)\) 等价于 \(\varepsilon\)

这意味着 \((f*g)(n)\displaystyle =\sum_{ab=n}f(a)g(b)=\varepsilon(n)\)

形式类似于一个方程组,\(f(1)\ne 0\),则可以推出:

\(g(n)=\frac{\varepsilon(n)-\displaystyle \sum_{ab=n,k\ne 1}f(a)g(b) }{f(1)}\)
::::

莫比乌斯反演

说说莫比乌斯函数 \(\mu(n)\)

  • \(n=1\) 时,\(\mu(n)=1\)

  • 若存在质数 \(p\) 使得 \(p^2|n\),则 \(\mu(n)=0\)

  • 否则,令 \(k\)\(\displaystyle\sum_{i\in \text{primes}}[i|n]\)\(\mu(n)=(-1)^k\)

易于证明,莫比乌斯函数是积性函数。

::::info[莫比乌斯函数的性质及证明]
\(\displaystyle\sum_{d|n}\mu(d)=\varepsilon(n)\)。证明如下。

\(\displaystyle n=\prod_{i=1}^{k}p_i^{e_i}\)\(\displaystyle m=\prod_{i=1}^{k}p_i\)

我们得到:

\(\displaystyle\sum_{d|n}\mu(d)=\sum_{d|m}\mu(d)=\sum_{i=0}^k\begin{pmatrix} k\\i\end{pmatrix}\times (-1)^i=(1+(-1))^k=[k=0]=[n=1]=\varepsilon(n)\)

其中用到了二项式定理。

::::

以 Dirichlet 卷积的形式,可以写成 \(\mu *1=\varepsilon\)。因此 \(\mu\) 是常值函数 \(1\) 的 Dirichlet 的逆。

对于此性质,我们可以得到:

\([i\perp j]=[\gcd(i,j)=1]=\displaystyle\sum_{d|\gcd(i,j)}\mu(d)=\sum_d[d|i][d|j]\mu(d)\)

它将互素的条件转化为关于莫比乌斯函数的求和式,方便进一步推导。

以上为莫比乌斯函数的定义以及性质,接下来想想怎么求。

对于求 \(\mu(n)\) 显然可以考虑质因数分解。时间复杂度为 \(O(n)\)

::::info[具体实现]

int mu(int x){
	int ret=1;
	for(int i=2;i*i<=x;i++){
		if(x%i)continue;
		ret=-ret,x/=i;
		if(x%i==0)return 0;
	}
	if(x>1)ret=-ret;
	return ret;
}

::::

对于求 \(\mu(1\sim n)\),利用它是积性函数,我们可以线性筛 \(O(n)\) 求出。

::::info[具体实现]

const int maxn=1e6+10;// 要求的大小
int mu[maxn];
vector<int>primes;
bool not_prime[maxn];
void get_mu(int n){
	mu[1]=1;
	for(int i=2;i<=n;i++){
		if(!not_prime[i]){
			primes.push_back(i);
			mu[i]=-1;
		}
		for(int p:primes){
			if(i*p>n)break;
			not_prime[i*p]=1;
			if(i%p==0){
				mu[i*p]=0;
				break;
			}
			mu[i*p]=-mu[i];
		}
	}
}

::::

莫比乌斯函数最重要的应用:莫比乌斯反演

\(\displaystyle f(n)=\sum_{d|n}g(d)\Longleftrightarrow g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d)\)

::::info[证明]
原命题等价于 \(f=g*1\Longleftrightarrow g=f*\mu\)

两边同时对 \(\mu\) 做卷积:\(f=g*1\Longleftrightarrow f*\mu=g*(1*\mu)=g\)
::::

posted @ 2026-01-20 17:29  mo_mo_yu  阅读(3)  评论(0)    收藏  举报