一、定义

欧拉函数定理是数论中极其常用的一个定理。对于一个正整数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

欧拉函数及其扩展 小结相关推荐

  1. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  2. 欧拉函数|(扩展)欧拉定理|欧拉反演

    也许更好的阅读体验 文章目录 欧拉函数 欧拉函数常用性质 欧拉定理 扩展欧拉定理 线性筛法 欧拉反演 欧拉函数 定义 欧拉函数是 小于等于 x的数中与x 互质 的数的 数目 符号 φ ( x ) \v ...

  3. 原根(扩展欧几里得+欧拉函数)

    1135 原根 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) ...

  4. 欧拉降幂及其扩展欧拉降幂

    欧拉降幂: 从公式来看,需要使用快速幂运算和欧拉函数 #include<bits/stdc++.h>using namespace std; typedef __int64 LL;cons ...

  5. 数学--数论-数论函数-欧拉函数

    **欧拉函数定义 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.例如euler(8)=4,因为1,3,5,7均和8互质. Euler函数表达通式: 其中p1,p2--pn为x的所有素因数 ...

  6. 中高级数论 [欧拉函数线性筛,二次剩余]

    欧拉函数线性筛 对于素数ppp, φ(p∗i)={p−1i=1p∗φ(i)p∣i(p−1)∗φ(i)p∤i\varphi (p*i)= \begin{cases} p-1& i=1\\ p*\ ...

  7. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)

    [目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...

  8. BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)

    传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Dis ...

  9. #欧拉函数 ~20.8.27

    目录 欧拉函数 一.用公式求 解 答 二.线性筛法求欧拉函数 扩展欧拉定理 欧拉函数 AcWing 873. 欧拉函数 一.用公式求 定义:1 ~ N 中与 N 互质的数的个数被称为欧拉函数,记为ϕ( ...

  10. 欧拉函数+欧拉定理+拓展欧拉定理(欧拉降幂)

    目录 欧拉函数 欧拉定理 拓展欧拉定理(欧拉降幂) 欧拉函数 在数论中,有正整数n,欧拉函数是小于n的正整数中与n互质的数的数目. 它的通式如下: φ(n)=n*(1-1/p1)*(1-1/p2)*( ...

最新文章

  1. pytorch实现BiLSTM+CRF用于NER(命名实体识别)
  2. Android 人脸识别
  3. SpringSecurity自定义UsernamePasswordAuthenticationFilter
  4. Rsync 3.1.0 发布,文件同步工具
  5. SDI, DVI, HDMI, DisplayPort的区别(Z)
  6. spring react_使用Spring WebFlux构建React性REST API –第2部分
  7. CSS去除按钮激活的高亮边框(Button的点击出现黑色外边框的取消)
  8. [渝粤教育] 中国地质大学 工程地质 复习题
  9. 用计算机处理文字,计算机文字 计算机文字与信息处理
  10. gp数据库日常运维sql语句笔记
  11. 用HTML写出能转换成合适的PDF文件(A4纸张大小)的相关问题和方法
  12. AMS1117和LM2596S芯片的问题总结
  13. npoi 删除多行 操作excel_NPOI操作EXCEL 【只争朝夕】
  14. Unity3d之坦克对战游戏 AI设计
  15. halcon学习实战系列—如何更便捷,更高效的计算同心度
  16. 直通大厂web入门级网页快速开发(建议收藏)
  17. 如何编写Python爬虫
  18. [教程]在VS上使用scanf,解决scanf报错问题
  19. 在线教育网站的一些瞎折腾……
  20. idead 1099端口被占用 解决

热门文章

  1. windows下使用wineshark分析抓取本地回环包
  2. [bzoj1878][SDOI2009]HH的项链
  3. 选项菜单-上下文菜单
  4. zabbix server安装配置
  5. MSSQL2005 活动进程等待类型说明
  6. Vue学习笔记(五)
  7. 2019 牛客多校第三场 H Magic Line
  8. c++中vector的学习
  9. UIImageView三种方式 和 位置分布
  10. 求解最长回文串 manachar算法