我有一个整数数组,我试图找到数组中所有值的 LCM(最小公倍数)。我已经lcm
单独写了一个方法;它需要两个值作为输入,并返回 lcm。我的lcm
方法工作得很好,但是当我用它来查找所有值的 LCM 时,我得到了错误的答案。
这是我的gcd
和lcm
方法:
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 as arr
、0 asstart
和数组长度 as 的数组时end
,我得到 30 作为答案,而我想要 60。当我放入一个包含从 1 到所有数字的数组时10,我得到840而不是2520。我真的无法解释。
算法应该可以工作——我已经在脑海中解决了。无法弄清楚我的代码有什么问题。
任何帮助将不胜感激。