我有一个整数数组,我试图找到该数组中所有值的LCM(最小公倍数)。我已经lcm单独写了一个方法;它接受两个值作为输入,并返回lcm。我的lcm方法工作得很好,但是当我用它来查找所有值的LCM时,我得到了错误的答案。
lcm
这是我gcd和的lcm方法:
gcd
public static int gcd(int a, int b){ if (a<b) return gcd(b,a); if (a%b==0) return b; else return gcd(a, a%b); } public static int lcm(int a, int b){ return ((a*b)/gcd(a,b)); }
这是我对数组值的lcm的要求:
public static int lcmofarray(int[] arr, int start, int end){ if ((end-start)==1) return lcm(arr[start],arr[end-1]); else return (lcm (arr[start], lcmofarray(arr, start+1, end))); }
当我放入一个数字1到5为arr,0为as start且数组的长度为的数组时end,得到30作为答案,而我想要60。当我放入一个包含从1到1的所有数字的数组时10,我得到840,而不是2520。我真的无法解释。
arr
start
end
该算法应该有效-我已经脑力激荡了。无法弄清楚我的代码出了什么问题。
任何帮助将不胜感激。
如果您将gcd函数更改为
public static int gcd(int a, int b){ if (a<b) return gcd(b,a); if (a%b==0) return b; else return gcd(b, a%b); }
它应该工作正常。