如果我们已经知道 GCD(a, b),我们如何找到 GCD(k + a, k + b)?

问题描述

我想知道是否可以在恒定时间内计算上述目标。我需要它来解决 codechef 上的问题。

解决方法

仅知道 gcd(a+k,b+k) 不可能在恒定时间内计算 gcd(a,b)

假设 c,d 是任意两个带有 d < c 的自然数。

a = d - d = 0
b = c - d
k = d

然后我们在 O(1) 时间知道

gcd(a,b) = gcd(0,c - d) = c - d

如果我们可以在 gcd(a+k,b+k) = gcd(c,d) 额外的时间内计算 O(1),那么我们可以在 O(1) 时间内计算所有 gcd,这是不可能的。

说了这么多,当然,在某些感兴趣的情况下,gcd(a,b) 的知识可能会导致 gcd(a+k,b+k) 的计算速度比其他方式更快。