zoukankan      html  css  js  c++  java
  • 初等数论阅读笔记§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);
        }
    }
    
  • 相关阅读:
    Reloading Java Classes 301: Classloaders in Web Development — Tomcat, GlassFish, OSGi, Tapestry 5 and so on Translation
    Chapter 6 -- Caches
    SVN OPS发布总结
    Chapter 5 -- ImmutableCollections
    差点掉坑,MySQL一致性读原来是有条件的
    PHP实现的一个时间帮助类
    H5拍照、选择图片上传组件核心
    Webpack + Vue 多页面项目升级 Webpack 4 以及打包优化
    javascript-函数表达式
    javascript遍历方法总结
  • 原文地址:https://www.cnblogs.com/ilverene/p/11448602.html
Copyright © 2011-2022 走看看