我有ab-cd = 1
,其中a,b,c,d是整数,并且给了我a
和c
。有人告诉我可以使用欧几里得算法来找到b
和d
,但是我不知道该如何应用。
答案 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 = 15
和c = 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
。实际上,是的。
您只需要对数字进行操作,并对有序对正确执行并行操作,最后一个就是您的答案。