当前位置: 首页 > 面试题库 >

具有多个数字的欧几里得算法(GCD)?

周和歌
2023-03-14
问题内容

因此,我正在用Python编写程序以获取任意数量的GCD。

def GCD(numbers):

    if numbers[-1] == 0:
        return numbers[0]


    # i'm stuck here, this is wrong
    for i in range(len(numbers)-1):
        print GCD([numbers[i+1], numbers[i] % numbers[i+1]])


print GCD(30, 40, 36)

该函数采用数字列表。这应该打印2。但是,我不了解如何递归使用算法,因此它可以处理多个数字。有人可以解释吗?

更新,仍然无法正常工作:

def GCD(numbers):

    if numbers[-1] == 0:
        return numbers[0]

    gcd = 0

    for i in range(len(numbers)):
        gcd = GCD([numbers[i+1], numbers[i] % numbers[i+1]])
        gcdtemp = GCD([gcd, numbers[i+2]])
        gcd = gcdtemp

    return gcd

好,解决了

def GCD(a, b):

    if b == 0:
        return a
    else:
        return GCD(b, a % b)

然后使用reduce,就像

reduce(GCD, (30, 40, 36))

问题答案:

由于GCD具有关联性,GCD(a,b,c,d)因此与相同GCD(GCD(GCD(a,b),c),d)。在这种情况下,Python的reduce函数将是将情况`len(numbers)

2`简化为简单的2数比较的理想选择。代码看起来像这样:

if len(numbers) > 2:
    return reduce(lambda x,y: GCD([x,y]), numbers)

Reduce将给定的功能应用于列表中的每个元素,因此类似

gcd = reduce(lambda x,y:GCD([x,y]),[a,b,c,d])

和做的一样

gcd = GCD(a,b)
gcd = GCD(gcd,c)
gcd = GCD(gcd,d)

现在剩下的唯一事情就是为when编写代码len(numbers) <= 2。仅向GCDin传递两个参数可reduce确保您的函数最多重复一次(len(numbers) > 2仅在原始调用中),这具有永不使堆栈溢出的额外好处。



 类似资料:
  • 首先,我知道欧几里得距离是什么,以及它在两个向量之间做什么或计算什么。 但我的问题是如何计算两个类对象之间的距离,例如在Java或任何其他OOP语言中。我读了很多关于机器学习的东西,已经使用库等编写了分类器。但我想知道,当我有例如以下对象时,如何计算欧几里德距离: 我已经知道的是(如果我没有错!)我必须将此对象转换为表示属性或“特征”的(n)个向量/数组(在机器学习中称为?) 但我该怎么做呢?这正

  • 问题内容: 我在二维空间中有一组点,需要计算每个点到另一个点的距离。 我的点数相对较少,最多不超过100个。但是,由于我需要经常快速地确定这些移动点之间的关系,并且因为我知道遍历这些点可能同样糟糕由于O(n ^ 2)的复杂性,我正在寻找利用numpy矩阵魔术(或scipy)的方法。 就象我的代码中所说的那样,每个对象的坐标都存储在其类中。但是,当我更新类坐标时,也可以用numpy数组更新它们。 我

  • 问题内容: 我在3D中有两点: 我想计算距离: 使用NumPy或一般使用Python的最佳方法是什么?我有: 问题答案: 用途 背后的理论:如数据挖掘导论所述 之所以有效,是因为欧几里得距离为l2范数,并且 中ord参数的默认值为2。

  • 作为一个类任务,我将编写一个C程序来生成所有低于给定值not'的毕达哥拉斯三元组。下面是我的代码,它首先使用欧几里德公式生成一个原语三元组(a,b,c),并打印形式为1 我遇到的大多数其他算法使用嵌套循环来检查平方和,并且随着t的增长,速度明显慢于此。有可能推导出一个证明它确实更快的证据吗?

  • 本文向大家介绍求mk矩阵A和nk矩阵的欧几里得距离?相关面试题,主要包含被问及求mk矩阵A和nk矩阵的欧几里得距离?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 先得到矩阵,然后对矩阵A和矩阵分别求出其中每个向量的模平方,并扩展为两个m*k的矩阵和。最终求得新的矩阵,并将此矩阵开平方得到A,B向量集的欧几里得距离。

  • 问题内容: 我有两个 x - y 坐标数组,我想找到一个数组中 每个 点与另一个数组中 所有 点之间的最小欧几里得距离。数组的大小不一定相同。例如: 我当前的方法遍历每个坐标,并计算该坐标与其他坐标之间的距离。 有没有一种方法可以消除for循环,并以某种方式在两个数组之间进行逐元素计算?我设想生成一个距离矩阵,为此我可以找到每一行或每一列中的最小元素。 看问题的另一种方法。假设我将(length