欧拉函数及其扩展 小结
一、定义
欧拉函数定理是数论中极其常用的一个定理。对于一个正整数n,它的欧拉函数值φ(n)代表小于n的正整数中与n互质的数的个数。例如,对于n = 9,在小于n的正整数中有1、2、4、5、7、8与9互质,所以φ(9) = 6。
欧拉函数定理给出了计算公式。正整数n的欧拉函数值,其中,p代表n的第几个质因子。例如,12有两个质因子2、3(注意这里的质因子不能重复计算),所以φ(12) = 12*(1/2)*(2/3) = 4。
二、性质
①若n为质数,显然,φ(n) = n - 1
②若n为奇数,有φ(2 * n) = φ(n)
③对于n > 2,所有的φ(n)均为偶数。
④小于n的与n互质的数的和可以表示为φ(n)*n/2
⑤线性同余方程 恒成立,由此还可以引出费马小定理,即当p为质数时,有。这条性质常被应用于求取乘法逆元。
⑥求取最小的m(m > 1),使φ(m) >= n,得到的m应为从n + 1开始的第一个素数。此条是我从欧拉函数表中观察得出的,或许有用,可以参考LightOJ1370。
三、计算方法
①从上面的计算公式可以看出,求一个数的欧拉函数值,需要得到它所有的质因子。我们可以借助质因子分解法来完成。原理和细节参见代码。
O(sqrt(n))求取φ(n)
int euler(int n)//求取φ(n) {int re = n;//这里实际上完成了公式中乘n的那一步 for(int i = 2;i * i <= n;i++){if(n % i == 0)//质因子分解,下方的操作保证了i为质数 {re = re / i * (i - 1);//欧拉函数的计算公式,这里先计算除法可以有效地防止溢出while(n % i == 0)//从n中约去所有的i,确保下一次得到的i仍为质数 {n /= i;}}}if(n != 1)//特殊情况,由于我们将复杂度优化到了O(sqrt(n))re = re / n * (n - 1);//则n在上面的操作中可能被约成了一个质数(或者它本身就是个质数),这里也需要计算在内。return re; }
②有时,我们会遇到需要多次查询很多个数的欧拉函数值的情况,O(sqrt(n))可能不够用。这时我们可以结合埃氏素数筛选法,在一趟遍历中通过寻找质数完成n个欧拉函数值的计算,快速地获得欧拉函数表。原理参见代码。
//O(maxn)获取欧拉函数表 int euler_table[maxn + 1]; for(int i = 0;i <= maxn;i++) {euler_table[i] = i;//这里实际上完成了公式中乘n的那一步 } for(int i = 2;i <= maxn;i++) {if(euler_table[i] == i)//根据埃氏筛法,在下面的处理下,满足这个判断的i一定是质数 {for(int j = i;j <= maxn;j += i)//遍历i所有的倍数 {euler_table[j] = euler_table[j] / i * (i - 1);//对所有i的倍数进行计算,这样,只要遍历了一个数所有的质因子,这个数的欧拉函数值也就得出了。 }} }
四、扩展欧拉定理
求解同余方程a^b ≡ x(mod m)时,b可能会非常大,扩展欧拉定理可以优化其计算。
当gcd(a, m) == 1时,由上方的性质④可以很容易地得出,a^b ≡ a^(b % φ(m)) (mod m)
当gcd(a, m) > 1 且b > φ(m)时,a^b ≡ a^(b % φ(m) + φ(m)) (mod m)
推导过程见https://blog.csdn.net/synapse7/article/details/19610361
转载于:https://www.cnblogs.com/sun-of-Ice/p/9328169.html
欧拉函数及其扩展 小结相关推荐
- 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法
打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...
- 欧拉函数|(扩展)欧拉定理|欧拉反演
也许更好的阅读体验 文章目录 欧拉函数 欧拉函数常用性质 欧拉定理 扩展欧拉定理 线性筛法 欧拉反演 欧拉函数 定义 欧拉函数是 小于等于 x的数中与x 互质 的数的 数目 符号 φ ( x ) \v ...
- 原根(扩展欧几里得+欧拉函数)
1135 原根 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) ...
- 欧拉降幂及其扩展欧拉降幂
欧拉降幂: 从公式来看,需要使用快速幂运算和欧拉函数 #include<bits/stdc++.h>using namespace std; typedef __int64 LL;cons ...
- 数学--数论-数论函数-欧拉函数
**欧拉函数定义 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.例如euler(8)=4,因为1,3,5,7均和8互质. Euler函数表达通式: 其中p1,p2--pn为x的所有素因数 ...
- 中高级数论 [欧拉函数线性筛,二次剩余]
欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...
- 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)
[目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...
- BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)
传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Dis ...
- #欧拉函数 ~20.8.27
目录 欧拉函数 一.用公式求 解 答 二.线性筛法求欧拉函数 扩展欧拉定理 欧拉函数 AcWing 873. 欧拉函数 一.用公式求 定义:1 ~ N 中与 N 互质的数的个数被称为欧拉函数,记为ϕ( ...
- 欧拉函数+欧拉定理+拓展欧拉定理(欧拉降幂)
目录 欧拉函数 欧拉定理 拓展欧拉定理(欧拉降幂) 欧拉函数 在数论中,有正整数n,欧拉函数是小于n的正整数中与n互质的数的数目. 它的通式如下: φ(n)=n*(1-1/p1)*(1-1/p2)*( ...
最新文章
- pytorch实现BiLSTM+CRF用于NER(命名实体识别)
- Android 人脸识别
- SpringSecurity自定义UsernamePasswordAuthenticationFilter
- Rsync 3.1.0 发布,文件同步工具
- SDI, DVI, HDMI, DisplayPort的区别(Z)
- spring react_使用Spring WebFlux构建React性REST API –第2部分
- CSS去除按钮激活的高亮边框(Button的点击出现黑色外边框的取消)
- [渝粤教育] 中国地质大学 工程地质 复习题
- 用计算机处理文字,计算机文字 计算机文字与信息处理
- gp数据库日常运维sql语句笔记
- 用HTML写出能转换成合适的PDF文件(A4纸张大小)的相关问题和方法
- AMS1117和LM2596S芯片的问题总结
- npoi 删除多行 操作excel_NPOI操作EXCEL 【只争朝夕】
- Unity3d之坦克对战游戏 AI设计
- halcon学习实战系列—如何更便捷,更高效的计算同心度
- 直通大厂web入门级网页快速开发(建议收藏)
- 如何编写Python爬虫
- [教程]在VS上使用scanf,解决scanf报错问题
- 在线教育网站的一些瞎折腾……
- idead 1099端口被占用 解决