问题:给定一个由 n 个数字组成的数组,找出它的 LCM。
由于 LCM(a,b) = a*b / GCD(a,b),这是我的原始代码:
class GFG {
// the simple 2 integers recursive to find their GCD.
static int getGcd(int a, int b){
while(a != b){
if(a >b){
a = a-b;
}else{
b= b-a;
}
}
return a;
}
// find GCD in an array that has more than two integers.
static int Gcd(int[] newArray){
int gcd = newArray[0];
for(int i=1; i<newArray.length; i++){
gcd = getGcd(gcd,newArray[i]);
}
return gcd;
}
static int Lcm(int[] newArray){
int multi =1;
for(int i=0; i< newArray.length; i++){
multi = multi* newArray[i];
}
return (multi/gcd);
}
public static void main (String[] args) {
int[] newArray = { 2, 7, 3, 9, 4 };
System.out.println(Gcd(newArray));
System.out.println(Lcm(newArray));
}
}
但是当我运行这段代码时,它显示了一些错误:
prog.java:33: error: cannot find symbol
return (multi/gcd);
^
symbol: variable gcd
我不知道如何修复它。请帮我更正我的代码...谢谢!!!
Lcm() 函数中没有定义 gcd。最后定义的 gcd 是在 Gcd() 函数中,而这不是全局变量 Lcm() 不能使用它。
也许你是这个意思?
static int Lcm(int[] newArray){
int multi =newArray[0];
int gcd = 0;
for(int i=1; i< newArray.length; i++){
gcd = getGcd(multi, newArray[i]);
if(gcd == 1) {
multi = multi * newArray[i];
}else {
multi = multi * newArray[i] / gcd;
}
}
return multi;
}
使用它可以产生结果。你可以考虑一下这个。我们从2开始,multi是2,下一个值是7。2和7的gcd是1,所以lcd就是14。然后我们用14比较3,gcd也是1,所以multi他们就是42.然后用42比较9,我们发现9有42的gcd是3,所以我们用42/3是14,然后用14和9,gcd是1,给multi 14x9是126。然后用126和4 ,gcd是2,所以multi是126/2=63,63和4gcd是1,所以最后multi是63x4是252。
看任意两个数,不管是[3,7],[50,5],[20,10],[100,10000],[52,57],[3,81], lcm 总是 a*b/gcd。在这种情况下,我们可以得到答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句