最不常见的除数

时间:2010-07-21 20:10:16

标签: algorithm

我正在尝试的是写递归函数,它返回最小公约数,或者例如让我们取150和125,最大公约数是25而最小公约数是5.我再次需要直接方法中的递归函数这是微不足道的。

3 个答案:

答案 0 :(得分:2)

测试每个数字,直到sqrt(min(a, b)):如果数字都可以被它整除,你就找到它了。如果需要,您只能测试质数。

如果您没有找到任何此类号码,请检查其他号码是否是最小值的倍数:如果是,则两者中的最小值是解决方案。否则,没有解决方案。

你可以做得更好。您最多只能前往sqrt(gcd(a, b))。这应该足够快。

答案 1 :(得分:1)

如果要查找数组元素的least common factor,可以先计算所有元素的GCD,然后找到获得的least prime factor的{​​{1}} ...

获取所有数组元素的gcd: -

GCD

现在,要获得最少的素数因子循环直到g=arr[0]; for(i=1;i<arr.length();i++) g=gcd(g,arr[i]);

sqrt(g)

答案 2 :(得分:0)

Python实现:
上述解决方案不适用于最小除数为5的数字5和10 所以在这里取平方根不会起作用

from math import gcd
def leastCommonPrimeDivisor(a, b):
    g=gcd(a,b)  # gcd of a and b
    for i in range(2,g+1):
        if g%i==0:
            return i # returns least common divisor
    return -1