如果我们已经知道 GCD(a, b),我们如何找到 GCD(k + a, k + b)?
Posted
技术标签:
【中文标题】如果我们已经知道 GCD(a, b),我们如何找到 GCD(k + a, k + b)?【英文标题】:How we can find GCD(k + a, k + b) if we already know the GCD(a, b)? 【发布时间】:2021-05-09 19:44:30 【问题描述】:我想知道是否可以在恒定时间内计算上述目标。我需要它来解决 codechef 上的问题。
【问题讨论】:
我投票结束这个问题,因为它是一个数学问题,因此属于 Math Stack Exchange。 @gspr 如何在恒定时间内计算某些东西(如果可能的话)是一个与编程相关的问题。数学和计算机科学之间的界限并不清晰。 @JohnColeman:我同意数学和 CS 之间的界限是模糊的。关于这个问题是否最适合数学或 CS 堆栈交换,这绝对是一个悬而未决的问题,但我不明白它是如何属于 SO 的。 【参考方案1】:仅知道gcd(a,b)
,不可能在恒定时间内计算gcd(a+k,b+k)
。
假设c,d
是任意两个带有d < c
的自然数。
让
a = d - d = 0
b = c - d
k = d
那么我们知道O(1)
时间
gcd(a,b) = gcd(0, c - d) = c - d
如果我们可以在O(1)
额外的时间内计算gcd(a+k,b+k) = gcd(c,d)
,那么我们可以在O(1)
时间内计算所有 gcd,这是不可能的。
说了这么多,当然有可能在某些感兴趣的情况下,gcd(a,b)
的知识可能会导致 gcd(a+k,b+k)
的计算速度比其他情况更快。
【讨论】:
以上是关于如果我们已经知道 GCD(a, b),我们如何找到 GCD(k + a, k + b)?的主要内容,如果未能解决你的问题,请参考以下文章