密码学基础-扩展的欧几里得算法求乘法逆元

一、先理解几个定义
规定定义在正整数上的二元函数gcd(a, b)(a≥b)表示正整数a和正整数b的最大公约数,例如:gcd(6,3)=3, gcd(7,4)=1.运算mod表示模数运算,例如5 mod 3 = 2, 或者 5 = 2 (mod 3)

欧几里德有个十分又用的定理: gcd(a, b) = gcd(b , a%b) ,这样,我们就可以在几乎是 log 的时间复杂度里求解出来 a 和 b 的最大公约数了,这就是欧几里德算法。例如:gcd(15750, 27216) = gcd(15750, 11466)=gcd(11466,4284)=gcd(4284, 2898) = gcd(2898, 1386) = gcd(1386, 126) = gcd(126, 0) = 126

二、扩展的欧几里得算法
给出正整数a和b,扩展的欧几里得算法可以计算a和b的最大公约数d,同时得到两个符号相反的整数x和y满足:d=gcd(a, b) = ax+by
乘法逆元
简单说,如果有:ab mod q = 1成立,则称a和b互为模q意义下的乘法逆元(a与b均与q互质)。
二、根据扩展的欧几里得算法求乘法逆
若a与b互质,那么d=gcd(a, b)=1, 即 ax + by = 1, 于是 by = (-x)a+1
也即:by=1(mod a),于是y即为b在模a意义下的乘法逆元。
在欧几里得算法中,可以把过程写的更清晰一些:
(仍以d=gcd(a,b)=ax+by为例)
a = q1b + r1, r1=ax1+by1;
b = q2r1 + r2, r2=ax2+by2;
r1 = q3
r2 + r3, r3=ax3+by3;
… … … …
r(n-2) = q(n)r(n-1)+r(n), r(n)=ax(n)+b*y(n)
r(n-1) = q(n+1)*r(n)+0

则:r(i-2) = q(i)r(i-1)+r(i)或 r(i) = r(i-2) - r(i-1)q(i)
又r(i-1) = a
x(i-1)+b
y(i-1)且r(i-2) = ax(i-2)+by(i-2)
带入得:
x(i) = x(i-2)-q*x(i-2)
y(i) = y(i-2)-q*y(i-2)
于是,据此可以构建一个表格来计算乘法逆元,可以在草稿纸上快速手算的那种,在考试中很有用,编程方法其它博文一般都有讲,就不提了

计算满足计算满足
r(-1)=ax(-1)=1; y(-1)=0a = ax(-1)+by(-1)
r(0)=bx(0)=0; y(0)=1b = ax(0)+by(0)
r(1)=a mod b q(1)=a/br(-1)=q(1)*r(0)+r(1)x(1) = x(-1)-q(1)*x(0) y(1) = y(-1)-q(1)*y(0)r(1)=ax(1)+by(1)
r(n)=r(n-2) mod r(n-1), q(n)=r(n-2)/r(n-1)r(n-2)=q(1)*r(n-1)+r(n)x(n) = x(n-2)-q(n)*x(n-1) y(n) = y(n-2)-q(n)*y(n-1)r(n)=ax(n)+by(n)
r(n+1) = r(n-1) mod r(n)=0 , q(n+1)=r(n-1)/r(n)r(n-1)=q*r(n)+0d=gcd(a,b)=r(n), x=x(n) , y=y(n)

注:表格中的除法都是整除
下面举一个例子,令a=1759, b=550,求x和y使得
ax+by=gcd(a,b)

iriqixiyi
-1175910
055001
110931-3
255-516
3421106-339
411-111355
504

解释:以i=2这一列为例:
r2 = r1 mod r0 = 550 mod 109 = 5; q2=550/109=5;
x2 = x0-q2*x1 = 0-5*1=-5; y2 = 1-5*(-3)=16
由此,1759*(-111)+550355 = 1
550×355 = 111×1759 + 1
550×355 = 1(mod 1759)
题目:求550在模1759下的乘法逆元。
答:乘法逆元是355
另,还可以这样看:
1759
(-111) = (-355)*550+1
1759×(-111)= 1(mod 550)
题目:求1759在模550下的乘法逆元。
答:乘法逆元是-111+550=439
再看一个例子,求7的乘法逆元(mod 71)
先建表,得算式1×71+(-10)×7 = 1,
故而7关于71的乘法逆元是-10+71 = 61.
读者可自行验算之
好了,欧几里德算法笔算方法先介绍到这里,以后补充其它方法。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值