密码学之欧几里德拓展算法 python代码实现

欧几里德拓展算法的具体原理读者可以自行百度,其他很多文章都说的比较清楚。

目标:

         计算gca(m,n)

         计算gca(m,n)=m*x+n*y中的x,y

思路:

本实验采用python语言进行编程,首先编写了oujilide函数。其中变量m,n为所求的两个数的最大公因子,将m,n赋值给a,b两个变量(由于后面a, b的值会发生变动),之后对a,b的值进行大小比较,使得a>=b。然后计算出a mod b的余数,并为x,y,x0,y0赋初值,对后面计算x, y做准备。之后采用while循环语句,并将r=0作为循环结束的条件,利用x1 = x - q*x0,y1 = y - q*y0对x,y进行计算,从而得出gcd(m,n)和x,y。

def oujilide(m, n):
    a = m
    b = n
    if abs(a) < abs(b):
        temp = a
        a = b
        b = temp
    r = a % b
    x, y = 1, 0
    x0, y0 = 0, 1
    while r != 0:
        q = a // b
        x1 = x - q*x0
        y1 = y - q*y0
        x = x0
        y = y0
        x0 = x1
        y0 = y1
        a = b
        b = r
        r = a % b
    print('gcd('+str(m)+','+str(n)+')='+str(b))
    print(str(b)+'='+str(m)+'*'+str(x0)+'+'+str(n)+'*'+str(y0))


print('计算两个数的最大公因子')
a = int(input('第一个数:'))
b = int(input('第二个数:'))
oujilide(a, b)

实验结果截图:

两个数互素:

两个数不互素:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值