初等数论阅读笔记§9
基本概念
数论函数
定义域属于整数集,值域属于复数集的函数被称为数论函数或是算术函数。
在OI中,我们所需要考虑的数论函数值域一般也属于整数集。
积性函数
设整数集合D满足条件:若\(m,n\in D\),则\(mn\in D\)。
如果定义在集合D上的数论函数\(f(n)\)满足\(f(mn)=f(m)f(n),(m,n)=1\)则称其为积性函数。
特别地,如果数论函数\(f(n)\)满足\(f(mn)=f(m)f(n)\)则称其为完全积性函数。
一些较常见的积性函数如下:
欧拉函数\(\varphi (i)=模i的既约剩余系的元素个数\)
约数个数函数\(d(i)=i的约数个数\)
约数和函数\(\sigma (i)=i的约数和\)
一些较常见的完全积性函数如下:
常函数\(I(i)=1\)
单位函数\(\epsilon (i)=[i==1]\)
恒等函数\(id(i)=i\)
此外,本文将会提到的莫比乌斯函数\(\mu (i)\)也是积性函数。
积性函数常用定理
设\(f(n)\)是不恒为零的数论函数,对于\(n>1\)设\(n=\Pi p_i^{a_i}\),那么\(f(n)\)是积性函数的充要条件是\(f(1)=1\)以及\(f(n)=\Pi f(p_i^{a_i})\)
必要性的证明是显然的。
充分性:设\(n=\Pi p_i^{s_i}, m=\Pi p_j^{s_j}\),当\((n,m)=1\)时,\(nm=\Pi p_i^{s_i}\Pi p_j^{s_j}\),所以有\(f(mn)=f(\Pi p_i^{s_i}\Pi p_j^{s_j})\\=\Pi f(p_i^{s_i})\Pi f(p_j^{s_j})\\=f(m)f(n)\)
所以\(f(n)\)是积性函数。
这个定理表明一个积性函数完全由它在\(p_i^{a_i}\)上的取值决定。
莫比乌斯函数
莫比乌斯函数\(\mu (i)=\left\{ \begin{aligned}1,d=1\\(-1)^r,d=\Pi p_i\\0,其他情况 \end{aligned}\right.\)
莫比乌斯函数拥有一个十分重要的性质:
设\(n\)是正整数,那么有\(\sum _{d|n} \mu {d}= \left\lfloor\frac{1}{n}\right\rfloor =\left\{ \begin{aligned}1,n=1\\0,n>1 \end{aligned}\right.\)
这个结论的证明较为显然,设\(n=\Pi p_i^{s_i}\),那么有 \(\sum _{d|n} \mu(d)=\sum _{d|\Pi p_i^{s_i}} \mu(d)=1-C^1_s+C^2_s-...+(-1)^sC^s_s\\=(1-1)^s=0\)
OI中莫比乌斯反演多与gcd函数有关,此处还有一个小结论\([gcd(x,y)==1]=\sum_{d|gcd(x,y)}\mu(d)\)
莫比乌斯变换
对于给定的数论函数\(f(n)\),考虑一种运算:\(F(n)=\sum _{d|n}f(d)\)
称\(F(n)\)为\(f(n)\)的莫比乌斯变换,\(f(n)\)为\(F(n)\)的莫比乌斯逆变换。
几个常见的莫比乌斯变换关系\((f(n),F(n))\)如下:
\((n,\sigma(n))\)
\((\varphi(n),n)\)
\((\mu(n),\left\lfloor\frac{1}{n}\right\rfloor)\)
莫比乌斯反演
莫比乌斯反演是对于给出的数论函数\(f(n)\),求其莫比乌斯变换或是莫比乌斯逆变换的过程,这个公式通常被称为莫比乌斯反转公式。
基本内容
设\(f(m),F(n)\)为数论函数,那么\(F\)为\(f\)的莫比乌斯变换的充要条件为\(f(n)=\sum _{d|n}\mu(d)F(\frac{n}{d})\)
先证明其充分性:
\(\sum _{d|n}f(d)=\sum _{d|n}\left\{ \sum_{k|d}\mu(k)F(\frac{d}{k})\right\}\\=\sum_{k|n}\mu(k)\sum_{k|d,d|n}F(\frac{d}{k})\)
令\(d=kl\),那么可以得到
\(\sum_{d|n}f(d)=\sum_{k|n}\mu(k)\sum_{l|\frac{n}{k}}F(l)\\=\sum_{l|n}F(l)\sum_{k|\frac{n}{l}}\mu(k)\\=F(n)\)
注意此处最后一步运用了我们在讲莫比乌斯函数时得到的推论,即莫比乌斯函数的莫比乌斯变换为\(\lfloor\frac{1}{n}\rfloor\)。
必要性:
将\(F(n)=\sum_{d|n}f(d)\)代入得到\(\sum_{d|n}\mu(d)F(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{l|\frac{n}{d}}f(l)\\=\sum_{l|n}f(l)\sum_{d|\frac{n}{l}}\mu(d)\\=f(n)\)
最后一步同样用到了证明充分性时的技巧:将外面的莫比乌斯函数移到最内层,然后运用结论消掉。
线性筛
莫比乌斯函数
回顾莫比乌斯函数的定义,对于\(n=\Pi p_i^{s_i},\frac{n}{m}=p_k\),如果\(s_k=1\),那么显然有\(\mu(n)=-\mu(m)\)。
否则,\(\mu(n)=0\)。
那么这个时候我们可以直接通过线性筛筛出莫比乌斯函数的值,代码如下:
mu[1]=1;
for (register int i=2; i<=maxn; ++i) {
if (!isprime[i]) prime[++tot]=i,mu[i]=-1;
for (register int j=1; j<=tot&&i*prime[j]<maxn; ++j) {
isprime[i*prime[j]]=1;
if (i%prime[j]==0) {
mu[i*prime[j]]=0;
break;
} else mu[i*prime[j]]=-1*mu[i];
}
}
欧拉函数
欧拉函数求的是\(|{x|x\in [1,n],x\in Z^+,(x,n)=1}|\)。
可以化简出式子:\(\varphi(n)=n\Pi(1-\frac{1}{p_i})\),实质是减去不与\(n\)互质的数。
对于\(n,\frac{n}{m}=p_k\),如果\(\frac{n}{m}|m\),那么\(\varphi(n)=\varphi(m)*p_k\),否则\(\varphi(n)=\varphi(m)*(p_k-1)\)。
phi[1]=1;
for (register int i=2; i<maxn; ++i) {
if (!isprime[i]) prime[++tot]=i,phi[i]=i-1;
for (register int j=1; j<=tot&&i*prime[j]<maxn; ++j) {
isprime[i*prime[j]]=1;
if (i%prime[j]==0) {
phi[i*prime[j]]=phi[i]*prime[j];
break;
} else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}