裴蜀定理与乘法逆元

转载请说明出处:http://blog.csdn.net/leader_one/article/details/75298966

说在前面

出于尊重,还是先简介一下裴蜀:。。。。。。好吧,网上并没有什么关于 艾蒂安·裴蜀 的个人简介。
为什么把裴蜀定理和乘法逆元放在一起讲呢? 因为二者之间有非常微妙的关系,裴蜀定理说明了两数不互质(a,m不互质)的情况下,a是没有关于m的乘法逆元的(a*x ≡ 1 mod m 不存在的)。好了,下文再详细解释。


裴蜀定理

简介裴蜀定理
裴蜀定理(Bézout’s identity)得名于法国数学家艾蒂安·裴蜀,说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式 ax+by = z):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
它的一个重要推论是:a,b互质的充要条件是存在整数x,y使ax+by=1
是不是性能强劲?(可以先自行思考一下与乘法逆元的关系,下文会讲解)


算法实现
别逗了吧,这是一个数学定理,直接用于思考就行,哪来的算法实现?


证明
裴蜀定理:若ax+by = z,则 gcd(a,b)| z
再顺手证明一下裴蜀定理:
设k = gcd(a,b),则 k | a, k | b,根据整除的性质,有 k | (ax+by)
设 s为ax+by的最小正数值
再设 q = [a / s](a整除s的值);r = a mod s = a-q(ax+by) = a(1 - qx)+b(-qy);
由此可见r也为a,b的线性组合;(ax+by称为a,b的线性组合)
又因为s为a,b的线性组合的最小正数值,0<= r < s,所以r的值为0,即 a mod s = r =0;s | a;
同理可得 s | b,则 s | k;
又因为 k | (ax+by),s为ax+by的最小正数值,所以 k | s;
因为 s | k,k | s,所以s = k;
原命题得证。
(这应该是裴蜀定理最简单的证明方法了)


关于N个数的拓展
以上是关于两个数a,b的,那有没有关于一堆数的呢?答案是有。
设a1,a2,a3……an为n个整数,d是它们的最大公约数,那么存在整数x1……xn使得x1 * a1+x2* a2+…xn* an=d
顺手再证明一下:
首先,d已经有了,则d | a1…..an,依旧设 s 为x1 * a1+x2* a2+…xn* an=d 的最小正整数值
再设 q = [a1 / s](a整除s的值);r = a1 mod s = a1-q(a1*x1+……+an * xn) = a1(1 - q * x1)+……+an(-q * xn);
由此可见r也为a1……an的线性组合;
又因为s为a1……an的线性组合的最小正数值,0<= r < s,所以r的值为0,即 a1 mod s = r =0;s | a1;
同理可得 s | a2……an,则 s | d;
又因为 d | (a1 * x1+……an * xn),s为线性组合的最小正数值,所以 d | s;
因为 s | d,d | s,所以s = d;
原命题得证。
证明方法与上面类似。


推论

  1. a,b互质的充要条件是存在整数x,y使ax+by=1
  2. 如果a1…an互质(不是两两互质),那么存在整数x1……xn使得x1* a1+x2* a2+…xn*an=1,反过来一样
  3. 方程 ax + by = 1 有解当且仅当整数a和b互质
  4. 一堆数情况的类同

乘法逆元

好了,轮到乘法逆元了,不知道机智的看客们有没有发现裴蜀定理与乘法逆元的关系,即a,m不互质时没有a关于m的乘法逆元,裴蜀定理有解释(肯定还有人不知道什么是乘法逆元)
简介乘法逆元
若有 a*x ≡ 1 (mod m),则称 x 为a关于m的乘法逆元,等价式 a * x+m * y = 1
当a,m不互质时,是没有解的,即乘法逆元不存在(还是裴蜀定理)


如何求解乘法逆元
经观察我们可以发现,a * x+m * y = 1 是一个二元一次方程
那么就很显然了,可以通过扩展欧几里得算法求解(不会扩展欧几里得算法的点这里
其实还有一个很神奇的东西叫做欧拉定理(讲解链接),它可以直接算出乘法逆元
(求解乘法逆元的前提是乘法逆元存在)


乘法逆元的作用
求解出了乘法逆元之后,它有什么用呢?答案是带除号的取模,即分数取模 (a / b) mod m
若a可以被b整除还好,直接算,但是数要是很大。。。
但是这一切问题有了乘法逆元都不存在了
设x为b关于m的乘法逆元,那么我们有a * x ≡(a / b) mod m
先来一个简单的证明:
首先(a/b) * 1 ≡(a/b) mod m是成立的,
然而 b * x ≡ 1 mod m,
所以有(a / b) * (b * x)≡ (a/b) mod m,
化简一下就有了 a * x ≡ (a/b) mod m
这样是不是分数取模问题就迎刃而解了。


按照惯例再说两句

本人蒟蒻一枚,博客难免有误,发现错误的大牛牪犇可以发私信联系本人指正错误。另外本博客可能会更新,可以考虑收藏一下。
好了,暂时就讲这么多了,如果绝对这里讲解得不够详细,也可以私信联系本人交流一下。
欢迎转载,转载请说明出处,谢谢。

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值