初等数论阅读笔记§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);
    }
}
posted @ 2019-09-02 20:00  Ilverene  阅读(503)  评论(0编辑  收藏  举报