初等数论阅读笔记§9

基本概念

数论函数

定义域属于整数集,值域属于复数集的函数被称为数论函数或是算术函数

在OI中,我们所需要考虑的数论函数值域一般也属于整数集。

积性函数

设整数集合D满足条件:若(m,nin D),则(mnin 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{ egin{aligned}1,d=1\(-1)^r,d=Pi p_i\0,其他情况 end{aligned} ight.)

莫比乌斯函数拥有一个十分重要的性质:

(n)是正整数,那么有(sum _{d|n} mu {d}= leftlfloorfrac{1}{n} ight floor =left{ egin{aligned}1,n=1\0,n>1 end{aligned} ight.)

这个结论的证明较为显然,设(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),leftlfloorfrac{1}{n} ight floor))

莫比乌斯反演

莫比乌斯反演是对于给出的数论函数(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}) ight}\=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))

注意此处最后一步运用了我们在讲莫比乌斯函数时得到的推论,即莫比乌斯函数的莫比乌斯变换为(lfloorfrac{1}{n} floor)

必要性:

(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|xin [1,n],xin Z^+,(x,n)=1}|)

可以化简出式子:(varphi(n)=nPi(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);
    }
}
原文地址:https://www.cnblogs.com/ilverene/p/11448602.html