0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数论入门:如何快速求出与n互素的数

算法与数据结构 来源:小K算法 作者:小K算法 2022-09-30 11:41 次阅读

01 故事起源

一个数n,在小于等于n的正整数[1,n]中,与n互素的数有多少个呢?

(注:x与n互素,说明x与n的最大公约数为1)

777f439a-406f-11ed-b1c7-dac502259ad0.jpg

02 分析

最直观的方法当然就是直接枚举所有小于n的数,再通过求最大公约数判断即可。

但当n很大的时候,这个方法就不优了。可能有同学已经发现了,这个不就是欧拉函数的定义吗,所以今天我们从数学上来分析如何快速求解。

03 欧拉函数

欧拉函数定义如下:

77ba6a06-406f-11ed-b1c7-dac502259ad0.jpg

欧拉函数具有几个优秀的性质,先介绍几个常用的数学符号,便于描述。

77d96f14-406f-11ed-b1c7-dac502259ad0.jpg

3.1 性质1

当n为素数时,很明显phi(n)=n-1,因为所有小于n的数都与n互素。

78056db2-406f-11ed-b1c7-dac502259ad0.jpg

当n为某个素数p的幂次时,即n=p^k,则与n不互素的一定为p的倍数。 [1,n]中p的倍数一共有p^(k-1)个,所以互素的即为总数减去不互素的个数。

782f80a2-406f-11ed-b1c7-dac502259ad0.jpg

3. 性质2

欧拉函数是一个积性函数,当整数m,n互素时,phi(mn)=phi(m)*phi(n)。

78650240-406f-11ed-b1c7-dac502259ad0.jpg

这个性质的证明需要用到同余和集合相关的定理,有点复杂,以后写同余相关的知识再专门分享如何证明,现在就先记住这个性质就行了。

04 计算

有了这2个性质就可以推导出欧拉乘积公式。

789251c8-406f-11ed-b1c7-dac502259ad0.jpg

接下来就只需要考虑如何对n进行质因素分解。 最简单的方式可以直接枚举,先找到最小的质因子p1,然后除去所有p1因子,再对剩余的数继续分解。

78cfd980-406f-11ed-b1c7-dac502259ad0.jpg

05 代码实现


inteuler_phi(intn){
intm=sqrt(n+0.5); intans=n;
for(inti=2;i<= m; ++i) {     
if(n==1)break;
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0)n/=i;
} } if(n>1)ans=ans/n*(n-1);
returnans; }

06 总结
现在的算法复杂度主要取决于寻找第一个质因子,枚举并不是最快的方法,更快的方法是基于费马小定理,miller_rabin,pollard_rho等原理的随机化算法。 数论是一个大类,在很多地方都有重要的应用,而素数在密码学中应用也很广泛,今天分享的算是数论入门的一个介绍,后面还会分享更多有关数论的知识。
编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4586

    浏览量

    92457

原文标题:如何快速求出与n互素的数有多少个?

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    诺基亚Nokia N95-1快速入门指南

    诺基亚Nokia N95-1快速入门指南
    发表于 11-26 18:24 22次下载

    CK-RX65N快速入门指南

    CK-RX65N快速入门指南
    发表于 01-11 18:48 0次下载
    CK-RX65<b class='flag-5'>N</b> – <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    RZ/N1 GOAL POWERLINK 快速入门指南

    RZ/N1 GOAL POWERLINK 快速入门指南
    发表于 03-14 20:05 0次下载
    RZ/<b class='flag-5'>N</b>1 GOAL POWERLINK <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    RZ/N1 目标管理快速入门指南

    RZ/N1 目标管理快速入门指南
    发表于 03-14 20:07 0次下载
    RZ/<b class='flag-5'>N</b>1 目标管理<b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    RZ/N1 目标 CANopen 快速入门指南

    RZ/N1 目标 CANopen 快速入门指南
    发表于 03-14 20:07 0次下载
    RZ/<b class='flag-5'>N</b>1 目标 CANopen <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    RZ/N1 目标 PROFINET 快速入门指南

    RZ/N1 目标 PROFINET 快速入门指南
    发表于 03-15 20:26 1次下载
    RZ/<b class='flag-5'>N</b>1 目标 PROFINET <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    YRDKRX62N 快速入门指南(NO-RTOS)

    YRDKRX62N 快速入门指南 (NO-RTOS)
    发表于 04-12 19:14 0次下载
    YRDKRX62<b class='flag-5'>N</b> <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南(NO-RTOS)

    RX62N Renesas Promotion Board 快速入门指南

    RX62N Renesas Promotion Board 快速入门指南
    发表于 04-17 20:03 2次下载
    RX62<b class='flag-5'>N</b> Renesas Promotion Board <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    YRDKRX63N 快速入门指南 Rev.3.03

    YRDKRX63N 快速入门指南 Rev.3.03
    发表于 05-15 19:29 0次下载
    YRDKRX63<b class='flag-5'>N</b> <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南 Rev.3.03

    CK-RX65N快速入门指南

    CK-RX65N快速入门指南
    发表于 06-30 20:31 0次下载
    CK-RX65<b class='flag-5'>N</b> – <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    RZ/N1 GOAL POWERLINK 快速入门指南

    RZ/N1 GOAL POWERLINK 快速入门指南
    发表于 07-05 20:32 0次下载
    RZ/<b class='flag-5'>N</b>1 GOAL POWERLINK <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    RZ/N1D CODESYS 快速入门指南

    RZ/N1D CODESYS 快速入门指南
    发表于 07-07 19:25 1次下载
    RZ/<b class='flag-5'>N</b>1D CODESYS <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南

    YRDKRX63N 快速入门指南 Rev.3.03

    YRDKRX63N 快速入门指南 Rev.3.03
    发表于 07-11 20:41 0次下载
    YRDKRX63<b class='flag-5'>N</b> <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南 Rev.3.03

    YRDKRX62N 快速入门指南(IAR Embedded Workbench)

    YRDKRX62N 快速入门指南 (IAR Embedded Workbench)
    发表于 08-04 18:30 0次下载
    YRDKRX62<b class='flag-5'>N</b> <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南(IAR Embedded Workbench)

    YRDKRX62N 快速入门指南(NO-RTOS)

    YRDKRX62N 快速入门指南 (NO-RTOS)
    发表于 08-04 18:30 0次下载
    YRDKRX62<b class='flag-5'>N</b> <b class='flag-5'>快速</b><b class='flag-5'>入门</b>指南(NO-RTOS)