欧几里德拓展算法的具体原理读者可以自行百度,其他很多文章都说的比较清楚。
目标:
计算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)
实验结果截图:
两个数互素:
两个数不互素: