浅谈欧拉定理及乘法逆元

浅谈欧拉定理及乘法逆元

本篇随笔简单讲解一下信息学奥林匹克竞赛数论部分欧拉定理及乘法逆元这一知识点。介绍的内容大致分为这么几个部分:“同余的基本概念、费马小定理、欧拉定理及其推论、乘法逆元”

同余的基本概念

同余的概念啊非常简单啦:如果两个整数\(a,b\)除以一个数\(m\)的余数相等的话,那么就叫做\(a,b\)在模\(m\)的意义上同余。

记作:
\[
a\equiv b\,\,\,(mod\,\,m)
\]
那么根据同余的这个定义,我们很容易能推导出一个性质:如果两个数\(a,b\)在模\(m\)的意义下同余,那么\(a-b\)就是\(m\)的倍数,这是显然的。

以及,如果\(a\%m=1\),那么就可以被改写成这样的式子:
\[
a\equiv 1\,\,\,(mod\,\,m)
\]
这个转化的正确性也是显然的。

费马小定理

费马小定理也非常简单啦!用语言描述就是,如果一个数\(p\)是质数,那么对于一个不为\(p\)的倍数的整数\(a\),有\(a^{p-1}\equiv 1\,\,\,(mod\,\,p)\)。那么把这个结论两边同时乘上一个\(a\),即可得出:对于任意的整数\(a\),\(a\)的\(p\)次幂与\(a\)在模\(p\)的意义上同余。

即:
\[
a^p\equiv a\,\,\,(mod\,\,p)
\]
证明过程由于笔者水平有限,请参阅百度百科:

引理1.
  若a,b,c为任意3个整数,m为正整数,且(m,c)=1,则当a·c≡b·c(mod m)时,有a≡b(mod m)。
  证明:a·c≡b·c(mod m)可得ac–bc≡0(mod m)可得(a-b)·c≡0(mod m)。因为(m,c)=1即m,c互质,c可以约去,a– b≡0(mod m)可得a≡b(mod m)。 [2]

引理2.
  设m是一个整数且m>1,b是一个整数且(m,b)=1。如果a[1],a[2],a[3],a[4],…a[m]是模m的一个完全剩余系,则b·a[1],b·a[2],b·a[3],b·a[4],…b·a[m]也构成模m的一个完全剩余系。
  证明:若存在2个整数b·a[i]和b·a[j]同余即b·a[i]≡b·aj..(i>=1 && j>=1),根据引理1则有a[i]≡aj。根据完全剩余系的定义可知这是不可能的,因此不存在2个整数b·a[i]和b·a[j]同余。

所以b·a[1],b·a[2],b·a[3],b·a[4],…b·a[m]构成模m的一个完全剩余系。

构造素数

的完全

因为

,由引理2可得

也是p的一个完全剩余系。由完全剩余系的性质,

易知

,两边可约去

这样就证明了费马小定理。

(结论必须要记住)
\[
a^p\equiv a\,\,\,(mod\,\,p)
\]

欧拉定理

在学习欧拉定理之前,需要先学习一下欧拉函数。推荐本蒟蒻的这篇博客:

欧拉函数详解

那么有了这个知识做铺垫,我们就可以得出欧拉定理的式子:
\[
a^{\phi(p)}\equiv1\,\,\,(mod\,\,p)
\]
也就是说,如果\(a,p\)为整数且\(a,p\)互质,那么\(a\)的\(p\)的欧拉函数次幂与\(1\)在模\(p\)意义下同余。

(以下证明摘自百度百科。)

证明

将1~n中与n互质的数按顺序排布:x1,x2……xφ(n) (显然,共有φ(n)个数)

我们考虑这么一些数:

m1=ax1;m2=ax2;m3=ax3……mφ(n)=axφ(n)

1)这些数中的任意两个都不模n同余,因为如果有mS≡mR (mod n) (这里假定mS更大一些),就有:

mS-mR=a(xS-xR)=qn,即n能整除a(xS-xR)。但是a与n互质,a与n的最大公因子是1,而xS-xR<n,因而左式不可能被n整除。也就是说这些数中的任意两个都不模n同余,φ(n)个数有φ(n)种余数。

2)这些数除n的余数都与n互质,因为如果余数与n有公因子r,那么axi=pn+qr=r(……),axi与n不互质,而这是不可能的。(因为axi=pn+qr=r(……),说明axi含有因子r,又因为前面假设n含有因子r,所以axi和n含有公因子r,因此axi与n不互质)那么这些数除n的余数,都在x1,x2,x3……xφ(n)中,因为这是1~n中与n互质的所有数,而余数又小于n.

由1)和2)可知,数m1,m2,m3……mφ(n)(如果将其次序重新排列)必须相应地同余于x1,x2,x3……xφ(n).

故得出:m1m2m3……mφ(n)≡x1x2x3……xφ(n) (mod n)

或者说a^[φ(n)](x1x2x3……xφ(n))≡x1x2*x3……xφ(n)(mod n)

或者为了方便:K{a^[φ(n)]-1}≡0 ( mod n ) 这里K=x1x2x3……xφ(n)。

可知K{a^[φ(n)]-1}被n整除。但K中的因子x1,x2……都与n互质,所以K与n互质。那么a^[φ(n)]-1必须能被n整除,即a^[φ(n)]-1≡0 (mod n),即a^[φ(n)]≡1 (mod n),得证。

欧拉定理的推论

欧拉定理能干什么呢?

比如,简化幂的模运算。

例题:计算\(7^{222}\)的个位数。(也就是计算\(7^{222}mod\,\,10\))。

那么,根据欧拉定理,\(a^{\phi(p)}\equiv1\,\,\,(mod\,\,p)\),我们可以有以下的推导:

首先,因为\(7,10\)互质,且\(\phi (10)=4\),所以有:\(7^4\equiv 1\,\,\,(mod\,\,10)\)。

那么,根据取余的性质,因为\(7^4mod\,\,10=1\),所以\(7^4\)的\(n\)次幂模10还等于1.

那么就可以有:

\(7^{222}=7^{4\times55+2}\),把1全部约去,得到:

\(7^2\equiv7^{222}\,\,\,(mod\,\,10)\)

这样就简单多了。

所以我们得出了这样的一个结论:
\[
a^n\,\,mod\,\,p=a^{n\%\phi(p)}\,\,mod\,\,p
\]
也就是说:
\[
a^n\equiv a^{n\%\phi(p)}\,\,\,(mod\,\,p)
\]
这个结论也叫做:欧拉定理的推论,极其重要。

对于线性计算的式子(这里指四则基本运算中除了除法之外的三种运算),如果要求我们对于\(a+b,a-b,a\times b\)的结果取模,那么我们完全可以在进行运算之前先对\(a,b\)取模,对结果不会造成任何影响。

但是如果要求我们对\(a^b\)这样的式子取模呢?

这就用到了欧拉定理的推论:我们可以把底数对\(p\)取模(这个操作的正确性就是由前面说的四则混合运算的正确性推导出来的,别忘了乘方运算的实质是一堆连乘)。指数对\(\phi(p)\)取模,再进行运算即可(快速幂走起)。

求乘法逆元

乘法逆元的概念

其实是一个介绍定义的过程:

如果\(ax\equiv1\,\,\,(mod\,\,p)\),并且\(a,p\)互质,则称\(a\)关于模\(p\)的乘法逆元为\(x\)。

还是比较容易记住的。

乘法逆元的求解

举个例子:

如果需要我们求解\(4\)关于模\(7\)的乘法逆元。那么也就是说,对于这个需要去求解的乘法逆元\(x\),我们只需要找到一个\(k\),使得下式成立:
\[
4x=7k+1
\]
(这个式子是由于乘法逆元的定义:\(4x\equiv 1\,\,\,(mod\,\,7)\)以及同余的定义得到的)。

关于乘法逆元的求解,我们首先要对其进行分类。

首先,我们需要明白的是,对于\(a\)关于模\(p\)的乘法逆元的求解,只有在\(a,p\)互质的时候才有解,否则就是无解。这不仅是定义规定的,更是满足大前提的首要条件(大家只需要牢牢记住就好)。

那么,现在,\(a,p\)已经互质了。那么又有两种情况:模数\(p\)是否为素数。

假如\(p\)为素数。那么我们可以使用费马小定理来求解乘法逆元。

根据费马小定理,有:\(a^{p-1}\equiv1\,\,\,(mod\,\,p)\),那么结合乘法逆元的定义,如果\(a,p\)互质,那么原式可以拆成\(a\times a^{p-2}\equiv1\,\,\,(mod\,\,p)\)。也就是说,这个时候的乘法逆元就是\(a^{p-2}\)。

第二种是扩展欧几里得算法求解,对于扩展GCD还有不明白的小伙伴,请移步本蒟蒻的这篇博客:

浅谈扩展GCD

对于扩展欧几里得算法,我们知道它可以被用于求解同余方程。

那么就和乘法逆元的求解很匹配了,因为乘法逆元的求解本质上就是在求解这么一个同余方程:
\[
ax\equiv 1\,\,\,(mod\,\,p)
\]
如果像我一开始一样不太会变通的话,请看下面的证明过程。

最裸最裸,我们会求解形如:\(ax+by=\gcd(a,b)\),这样的方程。

那么,我们只需要把这个\(ax\equiv1\,\,\,(mod\,\,p)\)转换成这样的形式进行求解即可。

假设我们可以把这个同余方程转换成\(ax+by=\gcd(a,b)\)的形式,那么当\(a,b\)互质时,\(\gcd(a,b)=1\),咦?我们发现这个东西和乘法逆元的定义:\(a,p\)互质好像啊!那就让\(b=p\)吧!

那么,有\(ax+by=1\)。

两侧同时对\(b\)取模(因为这个时候\(b=p\)了),有\(ax\%b+by\%b=1\%b=1\)。

因为\(by\%b=0\),所以原式就变成了:

\(ax\equiv1\,\,\,(mod\,\,p)\),得证。

这样的话有一道经典裸题例题:NOIP2012同余方程

然后我们就可以求出一个数的乘法逆元

线性求逆元

其实我认为,前面的“求一个数的逆元”的部分最终还是为这个“线性求逆元”做铺垫(理论知识大于天嘛!)。我们在学数论的时候可能都会发现,我们在探究的过程中都是一个“由局部到整体”的概念:由判断一个数是否为质数到判断一群数是否为质数,由求一个数的约数集合到筛选一群数的约数集......同样,在学会了求一个数的逆元之后,我们要学习线性筛逆元。

线性筛逆元其实是一个递推的过程,我们在这里着重讲其递推式的建立与证明。

我们可以得到:

\(\lfloor\frac{p}{i}\rfloor\times p+p\%i=p\)(这是显然的,就是商乘除数加余数等于被除数,小学三年级数学)

两边同时乘以\(\frac{1}{i}\times \frac{1}{p\%i}\),得到:
\[
\lfloor\frac{p}{i}\rfloor\times\frac{1}{p\%i}+\frac{1}{i}=\frac{p}{i\times(p\%i)}
\]
也就是说,
\[
\lfloor\frac{p}{i}\rfloor\times\frac{1}{p\%i}+\frac{1}{i}\equiv0\,\,\,(mod\,\,p)
\]
同余式移项得:
\[
\frac{1}{i}\equiv-\lfloor\frac{p}{i}\rfloor\times\frac{1}{p\%i}\,\,\,(mod\,\,p)
\]

原文地址:https://www.cnblogs.com/fusiwei/p/12013269.html

时间: 2024-10-03 02:43:18

浅谈欧拉定理及乘法逆元的相关文章

浅谈乘法逆元

一.定义 (及如何理解) 如果a*x≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p的乘法逆元为x.(from Wikipedia) a*x≡1 (mod p) 表示 a乘一个数x并模p等于1,即 a*x%p=1;看上去就是同余定理的一个简单等式. 而x 为 a 的逆元,记为x=a-1,所以我们也可以称 x 为 a 在mod b意义下的倒数, 什么意思呢? 可以理解为在x的倒数上加了个限定: 倒数定义为a*x=1,则x为a的倒数: 而逆元为:a*x%p=1; 用处:一般

浅谈模质数意义下的乘法逆元

原文链接(更好的阅读体验) 参考文章www.luogu.org/blog/zyxxs/post-xiao-yi-jiang-tan-qian-tan-sheng-fa-ni-yuan 什么是乘法逆元 若整数\(b,m\)互质,并且\(b|a\),若存在一个整数\(x\),使得\(a / b \equiv a \ast x (mod \text{ } m)\),称\(x\)为 \(b\)的模\(m\)乘法逆元. 乘法逆元的用处 有时候,我们需要求\(a/b \text{ } mod \text{

【日常学习】乘法逆元&amp;&amp;欧拉定理&amp;&amp;费马小定理&amp;&amp;欧拉函数应用&amp;&amp;常大学霸

转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake欢迎来看看 今天花了一个多小时终于把乘法逆元捣鼓明白了 鉴于我拙计的智商抓紧把这些记录下来 在此本栏目鸣谢里奥姑娘和热心网友himdd的帮助和支持 那么正文开始··· 逆元是干什么的呢? 因为(a/b)mod p ≠(a mod p)/(b mod p) 我们需要想一种方法避免高精 那就是把除法转化为乘法 因为(a*b) mod p = ( a mod p ) *( b mod p ) 怎么转化呢?

数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p2^{a2}p3^{a3}...pn^{an},b=p1^{b1}p2^{b2}p3^{b3}...pn^{bn}\),那么\(gcd(a,b)=\prod_{i=1}^{n}pi^{min(ai,bi)},lcm(a,b)=\prod_{i=1}^{n}pi^{max(ai,bi)}\)(0和任何

浅谈算法和数据结构

: 一 栈和队列 http://www.cnblogs.com/yangecnu/p/Introduction-Stack-and-Queue.html 最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且“图码并茂”,趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算

浅谈C# 多态的魅力(虚方法,抽象,接口实现)

浅谈C# 多态的魅力(虚方法,抽象,接口实现) 分类:             asp.net             C#              2014-02-08 11:29     786人阅读     评论(0)     收藏     举报 浅谈C# 多态的魅力(虚方法,抽象,接口实现) 前言:我们都知道面向对象的三大特性:封装,继承,多态.封装和继承对于初学者而言比较好理解,但要理解多态,尤其是深入理解,初学者往往存在有很多困惑,为什么这样就可以?有时候感觉很不可思议,由此,面向

Http协议中Get和Post的浅谈

起名困难户,每次写文章最愁的就是不知道该如何起个稍具内涵的名字,如果这篇文章我只是写写Get和Post的区别,我可以起个名字“Get和Post的那点事”,如果打算阐述一下Http协议原理性内容,那该叫“Http中你不知道的那些事”,两者都不是我想要的,前者太过浅薄,后者太过深奥,已超出本人的能力范围,于是我只能写点Http,Get,Post和个稀泥大家就将就着看一下,开头很多废话的毛病我发现我是越来越难改了,进入正题吧~ Http HTTP(Hypertext transfer protocol

P3811 【模板】乘法逆元

P3811 [模板]乘法逆元 题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样例#1: 10 13 输出样例#1: 1 7 9 10 8 11 2 5 3 4 说明 1≤n≤3×10?6??,n<p<20000528 输入保证 p 为质数. 我们有三种办法求逆元 由欧拉定理可知 当gcd(a,n)==1 时 我们有 Aφ(n-1)≡ 1(mod

浅谈尾递归

浅谈尾递归 2013-02-10 14:12:57 在<数据结构与算法分析:C描述>(Data Structures and Algorithm Analysis In C)的第三章中,以打印链表为例,提到了尾递归(tail recursion)并指出了尾递归是使用递归极其不当的例子,它指出虽然编译器会对尾递归自动优化,但即便如此最好还是不要去写尾递归.而我在<算法精解:C语言描述>(Mastering Algorithms with C)中也看到书中提到编译器会对尾递归进行优化,