在 Python 中查找两个数字的移位表之间的最小差值


假设我们有两个数字 p 和 q,我们需要找到 p 和 q 的无限移位表中任意项之间的最小差值,这些移位分别为 r 和 s,其中 r、s >= 0。

因此,如果输入类似于 p = 7 和 q = 17,r = 6 和 s = 3,则输出将为 0,因为 7 的倍数表为 [7, 14, 21, 28, 35, 42, 49, ...],而 17 的倍数表为 [17, 34, 51, 68, 85, 102, 119, ...],则 7 的移位表将为 [13, 20, 27, 34, 41, 48, 55, ...],而 17 的移位表将为 [20, 37, 54, 71, 88, 105, 121, ...],则这些移位表中两项之间的最小差值为 20-20 = 0。

为了解决这个问题,我们将遵循以下步骤:

  • g := (p, q) 的最大公约数

  • 差值 := |r-s| mod g

  • 返回差值和 g - 差值中的最小值

示例

让我们看看以下实现以更好地理解:

import math
def get_minimum_diff (p, q, r, s):
   g = math.gcd(p,q)
   difference = abs(r-s) % g
   return min(difference, g - difference)
p = 7
q = 17
r = 6
s = 3
print(get_minimum_diff(p, q, r, s))

输入

7,17,6,3

输出

0

更新于: 2020年8月20日

110 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.