数论——欧拉函数、欧拉定理、费马小定理 学习笔记

这篇具有很好参考价值的文章主要介绍了数论——欧拉函数、欧拉定理、费马小定理 学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数论——欧拉函数、欧拉定理、费马小定理

欧拉函数

定义

欧拉函数(Euler's totient function),记为 \(\varphi(n)\),表示 \(1 \sim n\) 中与 \(n\) 互质的数的个数。

也可以表示为:\(\varphi(n) = \sum\limits_{i = 1}^n [\gcd(i, n) = 1]\).

例如:

\(\varphi(1) = 1\),即 \(\gcd(1, 1) = 1\)
\(\varphi(2) = 1\),即 \(\gcd(1, 2) = 1\)
\(\varphi(3) = 2\),即 \(\gcd(1, 3) = 1\)\(\gcd(2, 3) = 1\)\(\dots\)

性质

  1. 欧拉函数是积性函数;即如果 \(\gcd(a, b) = 1\),那么 \(\varphi(a \times b) = \varphi(a) \times \varphi(b)\)
  2. 由唯一分解定理,设 \(\displaystyle n = \prod\limits_{i=1}^{s}p_i^{k_i}\),其中 \(p_i\) 是质数,有 \(\displaystyle \varphi(n) = n \times \prod\limits_{i = 1}^s{\frac{p_i - 1}{p_i}}\)
  3. \(n\) 是质数的时候,显然有 \(\varphi(n) = n - 1\)(定义)。

实现

根据性质 \(2\) 可以写出:

int euler_phi(int n) {
    int ans = n;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            ans = ans / i * (i - 1);
            while (n % i == 0) n /= i;
        }
    }
    return n > 1 ? ans / n * (n - 1) : ans;
}

线性筛求欧拉函数

注意到在线性筛中,每一个合数都是被最小的质因子筛掉。

比如设 \(p_1\)\(n\) 的最小质因子,\(k = n / p_1\),即 \(kp_1 = n\)
那么线性筛的过程中 \(n\) 通过 \(k \times p_1\) 筛掉。

观察线性筛的过程,我们还需要处理两个部分,下面对 \(k \bmod p_1\) 分情况讨论:

  • 如果 \(k \bmod p_1 = 0\),那么 \(k\) 包含了 \(n\) 的所有质因子;有:
\[\begin{aligned} \varphi(n) & = n \times \prod_{i = 1}^s{\frac{p_i - 1}{p_i}} \\\\ & = p_1 \times k \times \prod_{i = 1}^s{\frac{p_i - 1}{p_i}} \\\\ & = p_1 \times \varphi(k) \end{aligned} \]
  • 如果 \(k \bmod p_1 \neq 0\),这时 \(k\)\(p_1\) 是互质的,根据欧拉函数性质;有:
\[\begin{aligned} \varphi(n) & = \varphi(p_1) \times \varphi(k) \\\\ & = (p_1 - 1) \times \varphi(k) \end{aligned} \]
int primes[N], cnt;
bool is[N];

int phi[N];
int get_phi(int n) {
    phi[1] = 1;
    for (int i = 2; i <= n; ++i) {
        if (!is[i]) primes[++cnt] = i, phi[i] = i - 1;
        for (int j = 0; primes[j] <= n / i; ++j) {
            is[primes[j] * i] = 1;
            if (i % primes[j]) phi[primes[j] * i] = phi[i] * (primes[j] - 1);
            else {
                phi[primes[j] * i] = phi[i] * primes[j];
                break;
            }
        }
    }
}

欧拉定理

前置知识

前置知识1:完全剩余系

完全剩余系(最小非负完全剩余系),定义为:\(\mathbb Z_m = \{0, 1, \dots, m - 1\}\).

具体的定义为 整数集 \(S = \{r_1, r_2, \dots, r_s\}\),满足:

  1. 任意不同元素 \(r_i \not \equiv r_j \pmod m\).
  2. 任意 \(a \in \mathbb Z\),存在 \(r_i \equiv a \pmod m\).

也就是模 \(m\) 意义下的完全剩余系包含 \(0 \sim m - 1\) 内的所有整数,长度为 \(m\)

前置知识2:简化剩余系

简化剩余系,定义为:\(\Phi_m = \{r \in \mathbb Z_m : r \perp m\}\).

具体的定义为 整数集 \(S = \{r_1, r_2, \dots, r_s\}\),满足:

  1. 任意 \(r_i \perp m\).
  2. 任意不同元素 \(r_i \not \equiv r_j \pmod m\).
  3. 任意 \(a \perp m\),存在 \(r \equiv a \pmod m\).

也就是模 \(m\) 意义下的简化剩余系包含 \(0 \sim m - 1\) 内所有与 \(m\) 互质的整数,长度为 \(\varphi(m)\)

前置知识3:欧拉定理的引理

\(a \perp m\),且有 \(S = \{r_1, r_2, \dots, r_s\}\) 为一个简化剩余系,
\(S' = \{ar_1, ar_2, \dots, ar_s\}\) 也是一个简化剩余系。

证明:

  1. 对于任意 \(r_i\):由 \(a \perp m\)\(r_i \perp m\),得 \(ar_i \perp m\)(互质性质).
  2. 对于任意两个不同元素:由 \(r_i \not \equiv r_j \pmod m\)\(a \perp m\),得 \(ar_i \not \equiv ar_j \pmod m\).
  3. \(|S'| = |S|\)\((2)\) 得:任意 \(r_i\) 一定有与其对应的 \(ar_j\)
    因为对于任意 \(t \perp m\),存在 \(r_i \equiv t \pmod m\),也一定存在 \(ar_j \equiv t \pmod m\).

满足简化剩余系的定义,因此 \(S'\) 是一个简化剩余系。

定义

\(\gcd(a, m) = 1\),则 \(a^{\varphi(m)} \equiv 1 \pmod{m}\)

证明

\(S = \{ r_1, r_2, \cdots, r_{\varphi(m)} \}\) 为模 \(m\) 意义下的简化剩余系,
\(S' = \{ ar_1, ar_2, \cdots, ar_{\varphi(m)} \}\) 也为模 \(m\) 意义下的简化剩余系.

因为 \(a \perp m\),所以 \(r_1r_2 \dots r_{\varphi(m)} \equiv ar_1ar_2 \dots ar_{\varphi(m)} \pmod m\)
\(r_1r_2 \dots r_{\varphi(m)} \equiv a^{\varphi(m)} r_1r_2 \dots r_{\varphi(m)} \pmod m\).

因为 \(r_1r_2 \dots r_{\varphi(m)} \perp m\)(互质性质),所以可以约去;
\(a^{\varphi(m)} \equiv 1 \pmod m\).

应用

指数取模

\(a^k \equiv a^{k \bmod \varphi(p)} \pmod p\)

证明:

\[\begin{align} a^{u + v\varphi(p)} &\equiv a^ua^{v\varphi(p)} &\pmod p \\ &\equiv a^u(a^{\varphi(p)})^v &\pmod p \\ &\equiv a^u(1)^v &\pmod p \\ &\equiv a^u &\pmod p \end{align} \]

费马小定理

\(p\) 为素数,由于 \(\varphi(p) = p - 1\),代入欧拉定理可立即得到费马小定理:
\(p\) 为素数,\(\gcd(a, p) = 1\),则 \(a^{p - 1} \equiv 1 \pmod{p}\)

Reference

[1] https://oi-wiki.org/math/number-theory/euler/
[2] https://oi-wiki.org/math/number-theory/sieve/
[3] https://oi-wiki.org/math/number-theory/fermat/
[4] https://zhuanlan.zhihu.com/p/581822244
[5] https://zhuanlan.zhihu.com/p/536214853
[6] https://zhuanlan.zhihu.com/p/577742188
[7] https://blog.csdn.net/weixin_43145361/article/details/107083879
[8] https://baike.baidu.com/item/简化剩余系/3712809文章来源地址https://www.toymoban.com/news/detail-712059.html

到了这里,关于数论——欧拉函数、欧拉定理、费马小定理 学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法基础-数学知识-欧拉函数、快速幂、扩展欧几里德、中国剩余定理

    互质就是两个数的最大公因数只有1,体现到代码里面就是 a和b互质,则b mod a = 1 mod a (目前我不是很理解,但是可以这样理解:a和b的最大公因数是1,即1作为除数和b作为除数时,对于被除数a来说余数是一样的,即1/a的余数和b/a是一样的,即 b mod a = 1 mod a ) 欧拉函数的作用是

    2024年02月09日
    浏览(43)
  • 欧拉函数学习笔记

    首先, (varphi(n)) 的值是小于 (n) 且与 (n) 互质的数的个数。 其实,它还可以用一个叫做“积性函数”的东西拿线性筛求 (1) 到 (n) 的 (varphi) 值! 下面这张里面的 (phi) 和 (varphi) 是一个东西(在公式里面是 phi 和 varphi) 然后那堆歪歪斜斜甚至弯的都是 (1) (指

    2024年03月13日
    浏览(28)
  • 欧拉定理 & 扩展欧拉定理

    观前提醒 :「文章仅供学习和参考,如有问题请在评论区提出」 目录 前置 剩余类(同余类) 完全剩余系(完系) 简化剩余系(缩系) 欧拉函数 欧拉定理 扩展欧拉定理 参考资料 给定一个正整数 (n) ,把所有的整数根据 模 (n) 的余数 (rin [0, n - 1]) 分为 (n) 类,每一类

    2024年02月13日
    浏览(40)
  • 欧拉定理公式(包括欧拉降幂)

    a b ≡ { a b   m o d   φ ( p ) , gcd ⁡ ( a , p ) = 1 a b , gcd ⁡ ( a , p ) ≠ 1 , b φ ( p ) (   m o d     p ) a b   m o d   φ ( p ) + φ ( p ) , gcd ⁡ ( a , p ) ≠ 1 , b ≥ φ ( p ) a^{b}equivleft{begin{array}{ll} a^{b bmod varphi(p)}, operatorname{gcd}(a, p)=1 \\\\ a^{b}, operatorname{gcd}(a, p) neq 1, bvarphi(p) quad(bmo

    2024年02月07日
    浏览(46)
  • 数论 --- 约数和定理公式推导、最大公约数、欧几里得算法

    和试除法判断一个数是不是质数是一个道理 从小到大枚举所有的约数,如果当前数能整除这个数的话,说明这个数就是当前数的约数 优化,与试除法判断质数是一样的 如果 d 是 n 的约数,n / d 也一定能整除 n,一个数的约数也一定是成对出现的,在枚举的时候也可以只枚举

    2023年04月08日
    浏览(83)
  • 蓝桥杯AcWing学习笔记 8-1数论的学习(上)

    我的AcWing 题目及图片来自蓝桥杯C++ AB组辅导课 蓝桥杯省赛中考的数论不是很多,这里讲几个蓝桥杯常考的知识点。 欧几里得算法代码: 就是因式分解的定理,所有的整数都可以唯一分解成若干个质因子乘积的形式: N = P 1 α 1 × P 2 α 2 × . . . × P k α k N=P_{1}^{α_{1}}×P_{2}^{α

    2024年01月16日
    浏览(80)
  • 数论——线性同余方程、乘法逆元 学习笔记

    众所周知: 如果爆 int 请自行开 long long 或边读边模,或高精度处理。 定义 若 (a bmod m = b bmod m) ,则称 (a) 与 (b) 关于模 (m) 同余,记为 (a equiv b pmod m) . 同余的性质 反身性: (a equiv a pmod m) ; 对称性:若 (a equiv b pmod m) ,则 (b equiv a pmod m) ; 传递性:若 (

    2024年02月08日
    浏览(45)
  • 「学习笔记」(扩展)中国剩余定理

    有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何? 该问题出自《孙子算经》,具体问题的解答口诀由明朝数学家程大位在《算法统宗》中给出: 三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知。 (2 times 70 + 3 times 21 + 2 times

    2024年02月06日
    浏览(34)
  • 中国剩余定理(CRT)学习笔记

    (Aperp B) 表示 (gcd(A,B)=1) 。 (Amid B) 表示 (Bequiv 0pmod{A}(Aneq0)) 。 考虑以下这道题: 有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。 問物幾何?—— 《孫子算經》 也就是说,求出下列关于 (x) 方程组的最小整数解: [begin{cases}xequiv2pmod{3}\\\\xequiv3pmo

    2024年02月01日
    浏览(54)
  • 欧拉函数和线性筛法:AcWing 874. 筛法求欧拉函数

    1. 属于是先手推数学式子,然后代码比较简单的题目 2. 线性筛法,之前接触过一道类似的线性筛法的题目:线性筛法 3. 线性筛法是一个算法模板 顺便写一下这一道题目的笔记:AcWing 868. 筛质数 4. 下面详细分析一下线性筛法之外的数学部分的内容 5. 从1一直到某一个质因子的

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包