效果
![](https://img-blog.csdnimg.cn/f2045a5750f54ce2be6c6ab1b33c40ab.jpeg#pic_center)
代码
import numpy as np
class euclid:
def __init__(self, init_y=0):
self.init_y = init_y
def __get_Q_R(self, dividend: int, divisor: int)-> list:
Q_R = []
while(divisor != 0):
r = dividend % divisor
q = int((dividend - r) / divisor)
dividend = divisor
divisor = r
Q_R.insert(0, [q, r])
func = lambda x: list(x)
Q, R = map(func, list(zip(*Q_R)))
return Q, R
def __get_X_Y(self, init_y: int, q: list)-> list:
matrix = np.ones(shape=(2,2), dtype=np.int32)
ret = np.array([1, init_y]).reshape((2,1))
for i in q:
ret = np.array([[0, 1], [1, -i]]) @ ret
return ret.T.reshape((2,))
def get_valid_X_Y(self, dividend: int, divisor: int)-> list:
Q, R = self.__get_Q_R(dividend, divisor)
init_y = self.init_y
X_Y = self.__get_X_Y(init_y=init_y, q=Q)
while (X_Y[1] < 0):
init_y += 1
X_Y = self.__get_X_Y(init_y=init_y, q=Q)
String = f'gcd({dividend}, {divisor}) = {X_Y[0]} * {dividend} + {X_Y[1]} * {divisor} = {R[1]}'
return X_Y, String
if __name__=='__main__':
dividend = 239
divisor = 17
euc = euclid(init_y=0)
X_Y, String = euc.get_valid_X_Y(dividend, divisor)
print(String)