三、欧拉函数

请思考以下问题:

任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?)

计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以 φ(n) = 4。

φ(n) 的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。

第一种情况

如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系。

第二种情况

如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。比如5与1、2、3、4都构成互质关系。

第三种情况

如果n是质数的某一个次方,即 n = p^k (p为质数,k为大于等于1的整数),则

比如 φ(8) = φ(2^3) =2^3 - 2^2 = 8 -4 = 4。

这是因为只有当一个数不包含质数p,才可能与n互质。而包含质数p的数一共有p^(k-1)个,即1×p、2×p、3×p、...、p^(k-1)×p,把它们去除,剩下的就是与n互质的数。

上面的式子还可以写成下面的形式:

可以看出,上面的第二种情况是 k=1 时的特例。

第四种情况

如果n可以分解成两个互质的整数之积,

n = p1 × p2

φ(n) = φ(p1p2) = φ(p1)φ(p2)

即积的欧拉函数等于各个因子的欧拉函数之积。比如,φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。

这一条的证明要用到"中国剩余定理",这里就不展开了,只简单说一下思路:如果a与p1互质(a<p1),b与p2互质(b<p2),c与p1p2互质(c<p1p2),则c与数对 (a,b) 是一一对应关系。由于a的值有φ(p1)种可能,b的值有φ(p2)种可能,则数对 (a,b) 有φ(p1)φ(p2)种可能,而c的值有φ(p1p2)种可能,所以φ(p1p2)就等于φ(p1)φ(p2)。

第五种情况

因为任意一个大于1的正整数,都可以写成一系列质数的积。

根据第4条的结论,得到

再根据第3条的结论,得到

也就等于

这就是欧拉函数的通用计算公式。比如,1323的欧拉函数,计算过程如下:

如何求欧拉函数~转载相关推荐

  1. 线性筛法 与 线性求欧拉函数 的计算模板

    简介 懂得如何快速计算质数是十分重要的 在筛法的基础上,我们可以使用更为高级的线性筛法! 顾名思义,就是时间复杂度是线性的,即 O(N)O(N) ,N 为所求的质数范围 而对编程有所接触的人,应该都知 ...

  2. 【模板题】欧拉函数与线性筛求欧拉函数

    欧拉函数是什么? 定义:对于正整数nnn,欧拉函数是小于或等于nnn的正整数中与nnn互质的数的个数,记作φ(n)\varphi (n)φ(n). φ(1)=1\varphi (1)=1φ(1)=1. ...

  3. 874. 筛法求欧拉函数

    874. 筛法求欧拉函数 题目 代码 题目 给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和. 输入格式 共一行,包含一个整数 n. 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉 ...

  4. AcWing 874. 筛法求欧拉函数

    线性筛法求解欧拉函数 有关线性筛法的介绍,可以参考这道题:868. 筛质数 - AcWing题库 这道题y总采用了线性筛选法来筛选掉指定范围内的合数,筛选出质数.思维利用得极为巧妙. 结合y总讲解视频 ...

  5. AcWing 874. 筛法求欧拉函数(线性筛法求欧拉函数模板)

    给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和. 输入格式 共一行,包含一个整数 n. 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和. 数据范围 1≤n≤10^6 输入 ...

  6. hdu2824(2009多校第一场) 线性筛法求欧拉函数

    欧拉函数指小于n且与其互质的数个数: phin=n*(1-1/p1)*(1-1/p2)*...(1-1/pn) 由此便可以利用类似筛素数筛出所有欧拉函数,具体看代码: 1 #include<st ...

  7. ~~筛法求欧拉函数(附模板题)

    模板 int primes[N], cnt; // primes[]存储所有素数 int euler[N]; // 存储每个数的欧拉函数 bool st[N]; // st[x]存储x是否被筛掉voi ...

  8. AcWing 874. 筛法求欧拉函数(欧拉函数)

    题目链接 https://www.acwing.com/problem/content/876/ 思路 对于一个数x如果是质数,那么它的欧拉函数就为x−1x-1x−1,对于其他合数我们可以将其拆成最小 ...

  9. XDOJ-1098-突击数论前的xry111(筛选法求欧拉函数)

    转载于:https://www.cnblogs.com/GrowingJlx/p/6642766.html

最新文章

  1. java程序设计实验报告_JavA程序设计实验报告.doc
  2. 耗时三小时整理的机器视觉知识-建议收藏转发
  3. C#进阶系列——WebApi 跨域问题解决方案:CORS
  4. Element UI——布局容器el-container子元素强制上下排列
  5. 2020年408真题_2020年408真题和参考解析
  6. engagement center的session.connect
  7. pat00-自测5. Shuffling Machine (20)
  8. Leetcode--279. 完全平方数
  9. 【记录】Docker push 到dockerhub网站
  10. VS2013中修改.dll工程项目的.lib和.dll的输出路径
  11. android 底部停靠 底部吸附_android让xml布局的底部跟随软键盘
  12. Node对CommonJS模块的实现
  13. OSChina 周二乱弹 ——有时醒来发现身边是不同的姑娘
  14. MVC4 数据验证、特性、自动属性总结
  15. NoSQL数据库知识
  16. 日常英语口语900句
  17. File /py-faster-rcnn/tools/../lib/datasets/imdb.py, line 108, in append_flipped_images assert
  18. python泰勒公式计算e的x次方_e的x次方在x0=0的泰勒展开式
  19. Xshell连接路由器或交换机Console口
  20. 一周信创舆情观察(1.24~2.6)

热门文章

  1. python数据库更新消息提醒_用Python实现校园通知更新提醒功能
  2. 鸿蒙系统布局,华为的布局,开始了!第二款鸿蒙系统产品,即将亮相
  3. java自动转换_java类型转换详解(自动转换和强制转换)
  4. Canvas设置样式无效导致圆变成椭圆的问题研究剖析
  5. JDK15新特性密封类可以被继承了!
  6. Oracle第三课之PLSQL
  7. 产品经理必须要了解的经济学原理--“口红效应”
  8. Hibernate 关系映射
  9. python-css反爬之svg映射
  10. 学习《apache源代码全景分析》之摘录