数论——欧拉函数

数论——欧拉函数定义小于n的正整数中与n互质的数的数目(φ(1)=1)通式证明:设p是N的质因子,1~N中p的倍数有p,2p,3p,…,(N/p)*p,共N/p个。同理,若q也是N的质因子,则1~N中q的倍

大家好,又见面了,我是你们的朋友全栈君。

定义

小于n的正整数中与n互质的数的数目(φ(1)=1)

通式

<span role="heading" aria-level="2">数论——欧拉函数

证明:

  设p是N的质因子,1~N中p的倍数有p,2p,3p,…,(N/p)*p,共N/p个。

  同理,若q也是N的质因子,则1~N中q的倍数有N/q个。

  根据容斥原理,1~N中除去q的倍数与p的倍数后,数的个数为N – N/p – N/q + N/(pq) = N(1 – 1/p)(1 – 1/q)。

  而要求1~N中与N互质的数的个数,只需将N的所有质因子的倍数全部除去即可。

  利用容斥原理,因式分解后即可得到上式。

性质

(以下只列举我们需要用到的一些性质)

我们用phi(N)表示欧拉函数。

  • 当N为质数时,显然phi(N)=N-1。
  • 2.根据算数基本定理,N=p1C1*p2C2*…*pkCk 。设N的最小质因子为p,当p的指数为1时,phi(N)=(p-1)*phi(N/p)。
  • 3. 当p的指数不为1时,同2可证得phi(N)=p*phi(N/p)。

2的证明:

  根据欧拉函数通式,

  phi(N)=N*(p1-1)/p1*(p2-1)/p2*…*(pk-1)/pk,

  phi(N/p1)=N/p1*(p2-1)/p2*…*(pk-1)/pk,

  其中p1即为N的最小质因子,比较两式即可得证。

直接法

模板题链接:欧拉函数

代码实现:

int Euler(int x)
{
    int res=x;for(int i=2;i<=x/i;i++)
    {
        if(x%i==0)
        {
            res=res/i*(i-1);
            while(x%i==0)x/=i;
        }
    }
    if(x>1)res=res/x*(x-1);

    return res;
}

线性筛法

根据前面的欧拉线性筛质数的算法(可参考本人博客:数论——质数筛法),由于它在筛选的同时也求出了每个数的最小质因子,故而在其基础上求出欧拉函数即可。

模板题链接:筛法求欧拉函数

代码如下:

typedef long long ll;
const int N = 1000010;

int n;
int prime[N],cnt,v[N];
int phi[N];

ll Euler_prime(int n)
{
    phi[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(!v[i])
        {
            prime[++cnt]=i;
            phi[i]=i-1;
        }
        for(int j=1;prime[j]<=n/i;j++)
        {
            int p=prime[j];
            v[p*i]=1;
            if(i%prime[j]==0)
            {
                phi[i*p]=p*phi[i];
                break;
            }
            phi[i*p]=(p-1)*phi[i];
        }
    }
    ll res=0;
    for(int i=1;i<=n;i++)res+=phi[i];
    return res;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155353.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python内置函数详解——总结篇

    Python内置函数详解——总结篇引言国庆期间下定决心打算学习Python,于是下载安装了开发环境。然后问题就来了,怎么开始呢?纠结一番,还是从官方帮助文档开始吧。可是全是英文啊,英语渣怎么破?那就边翻译边看边实践着做吧(顺便吐槽

    2022年7月5日
    21
  • pca主要成分分析_通俗易懂的俗语

    pca主要成分分析_通俗易懂的俗语转载自:http://blog.codinglabs.org/articles/pca-tutorial.html文章分析脉络梳理: 1.向量A和B的内积表示的是向量A在B上的投影长度。那么将一个向量与新的基做内积,结果则表示该向量在新的基下的坐标。2.将新选定的基表示成矩阵形式,与原向量相乘,就得到了原向量在新选定的基所表示的空间(或坐标系)中的坐标表示了。3.怎样选定这组基用于数据降维?(目标…

    2022年10月16日
    3
  • 卸载dpkg安装的软件_ubuntu卸载deb软件

    卸载dpkg安装的软件_ubuntu卸载deb软件deb文件是linux发行版debian系统的安装包格式,还有像基于debian系统的发型版ubuntu等系统就是使用的deb格式安装包,我们可以使用dpkg命令进行安装管理这些deb安装包文件。方法/步骤这里我使用的ubuntu系统做演示,首先把deb文件放到一个文件夹中,例如我这里的dolphin_emu文件。在文件夹里右键“在终端打开”。使用dpkg命令进行安装…

    2022年10月6日
    3
  • 图像处理——Canny算子 图像边缘检测:Canny算子、Prewitt算子和sobel算子

    图像处理——Canny算子 图像边缘检测:Canny算子、Prewitt算子和sobel算子https://blog.csdn.net/fengye2two/article/details/79190759https://www.jianshu.com/p/bed4ffe996a1

    2022年7月14日
    15
  • 分享一款“暗黑系列”Idea主题插件Material Theme「建议收藏」

    分享一款“暗黑系列”Idea主题插件Material Theme「建议收藏」偶然发现一款“暗黑系列”idea主题插件,感觉非常不错,分享一下~github:https://github.com/equinusocio/material-theme安装plugins-&gt;browserepositories-&gt;search“material-theme”安装完重启idea设置切换主题Editor-&gt;ColorSc…

    2022年6月27日
    114
  • python win32api中文手册_python 模拟鼠标和键盘输入

    python win32api中文手册_python 模拟鼠标和键盘输入importwin32guiimportwin32conimportwin32api#从顶层窗口向下搜索主窗口,无法搜索子窗口#FindWindow(lpClassName=None,lpWindowName=None)窗口类名窗口标题名handle=win32gui.FindWindow(“Notepad”,None)#获取窗口位置left,top,right,bo…

    2022年10月11日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号