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