#|扩展Euclid算法/欧几里得算法,RSA算法求解d

扩展Euclid算法(欧几里得算法) /?ju:klid/ : 找出两个整数x,y满足:xa+yb=1
为了使x和y存在,a和b的最大公约数必须是1(即a和b互为素数)。
例子:找出x和y,使得51x+100y=1

u x y q
100 0 1
51 1 0 100/51=1
49 0-1*1= -1 1-0*1= 1 51/49=1
2 1-(-1)*1=2 0-1*1=-1 49/2=24
1 -1-2*24=-49 1-(-1)*24=25 2/1=2
0 100 -51
注解:
第一二行:x,y值是固定的模板,只能这样写;第一行中的u值是100和51中较大的那个。
第一个q 是100除以51取商,值是1。第三个u值 是100除以51取余,值是49。
第三行第二个数 = 第一行的x - 第一行的y×1 = 0-1×1
————这里乘的1就是上一行的q值,剩下的0、1是第一行的x,y。
第三行第三个数=1-0*1————1、0是第二行的x,y
51除以49商1余2:第四行第二个数=1-(-1) ×1,第三个数:0-1×1——这里乘的1就是上一行的q值,黄色标注的1,0是第二行的x,y值。
总结:
X的值 = 前两行的x 减去 (前一行的x 乘以 前一行的q)
Y的值 = 前两行的y 减去(前一行的y 乘以 前一行的q)
所以,51X(-49)+100X25=1
最后一行是为了检验有没有算对
将此算法应用到 RSA算法求解d中: 例子:找出d和(-k),满足3d+40(-k)=1
【#|扩展Euclid算法/欧几里得算法,RSA算法求解d】#|扩展Euclid算法/欧几里得算法,RSA算法求解d
文章图片

求得d本来应该是-13的,但通常d取最小正整数。
所以要加上个40就得到了最小正整数。
————注意:-13是d,加上40后仍然也是d,d=27

    推荐阅读