ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线性筛求欧拉函数的证明

2020-05-28 09:02:39  阅读:256  来源: 互联网

标签:dfrac varphi times 筛求 公式 线性 质因数 欧拉


在线性筛求欧拉函数中,我们用到了以下公式:

若$i$为质数,则$\varphi(i)=i-1$;

若$p_j\mid i$,则$\varphi(i\times p_j)=\varphi(i)\times p_j$;

若$p_i\nmid i$,则$\varphi(i\times p_j)=\varphi(i)\times \varphi(j)=\varphi(i)\times (p_j-1)$。

其中$p_j$表示一个质数。

后两个公式是由欧拉函数的计算公式导出的。下面给出欧拉函数的计算公式:

设$n$有$k$个质因数$p_1,p_2,p_3,\dots ,p_k$,则

$$\varphi(n)=n\prod\limits_{i=1}^k (1-\dfrac{1}{p_i})$$

我们来分析一下这个公式,它的前半部分是$n$,表示原数,后半部分是一个连乘,可以发现每一个重复的因式都是$\dfrac{p_i-1}{p_i}$,表示$n$的每种质因数对$\varphi(n)$的贡献。

现在来证明第二个公式:

若$p\mid n$,则$\varphi(n\times p)=\varphi(n)\times p$

因为$p\mid n$,且$p$是一个质数,所以$p$是$n$的一个质因数,自然也是$n\times p$的一个质因数,所以从$n$到$n\times p$,质因数种类没有发生变化,欧拉函数计算公式里的连乘部分也就没有发生变化,只需要在最前面多乘上一个$p$表示原数的变化。

接下来证明第三个公式:

若$p\nmid n$,则$\varphi(n\times p)=\varphi(n)\times (p-1)$

发现从$n$到$n\times p$,新增了一个质因数种类$p$,所以除了公式的前半部分要乘上$p$,还要在后半部分乘上$(1-\dfrac{1}{p})$,也即从$n$到$n\times p$,欧拉函数增长了$p(1-\dfrac{1}{p})=p-1$倍。

 

代码:

    int k,lis[M+3];
    bool prm[M+3];
    int phi[M+3];
    
IL void getphi(){
    phi[1]=1;
    for(RI i=2;i<=m;i++){
        if(!prm[i]){
            lis[++k]=i;
            phi[i]=i-1;
            
        }
        
        for(RI j=1;j<=k&&i*lis[j]<=m;j++){
            prm[i*lis[j]]=true;
            
            if(i%lis[j]==0)
                phi[i*lis[j]]=phi[i]*lis[j];
            else 
                phi[i*lis[j]]=phi[i]*(lis[j]-1);
            
        }
        
    }
    
}
View Code

其中$M$表示最大值域,$m$表示实际值域。

标签:dfrac,varphi,times,筛求,公式,线性,质因数,欧拉
来源: https://www.cnblogs.com/Hansue/p/12978192.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有