使用欧几里得算法找到2个变量

时间:2019-10-29 17:52:24

标签: algorithm

我有ab-cd = 1,其中a,b,c,d是整数,并且给了我ac。有人告诉我可以使用欧几里得算法来找到bd,但是我不知道该如何应用。

1 个答案:

答案 0 :(得分:1)

您只需对其进行跟踪即可。

欧几里得算法以一对数字开头,并用新的一对数字代替。像这样:

(x, y) -> (y, x - (x//y) * y)

(a, c)开始,然后重复进行此操作,直到得到一对将其中一个分开的对。

但是我们可以并行地将每个数字视为原始两个数字的线性组合。因此,如果x = i*a + j*c可以用(i, j)表示。同上y可以用(k, l)表示。但是现在我们可以将操作表示如下...

((i, j), (k, l)) -> ((k, l), (i - (x//y) * k, j - (x//y) * l))

在此并行表示中,我们从((1, 0), (0, 1))开始。当我们最终达到1时,我们现在知道了答案!

这似乎有点抽象,让我们举一个真实的例子。让我们来做a = 15c = 11

(15, 11) -> (11,  4) | x//y = 1 | (( 1,  0), ( 0,  1)) -> (( 0,  1), ( 1, -1))
(11,  4) -> ( 4,  3) | x//y = 2 | (( 0,  1), ( 1, -1)) -> (( 1, -1), (-2,  3))
( 4,  3) -> ( 3,  1) | x//y = 1 | (( 1, -1), (-2,  3)) -> ((-2,  3), ( 3, -4))

因此,我声称是3 * 15 + (-4) * 11 = 1。实际上,是的。

您只需要对数字进行操作,并对有序对正确执行并行操作,最后一个就是您的答案。