问题描述
我想知道是否可以在恒定时间内计算上述目标。我需要它来解决 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)
的计算速度比其他方式更快。