我想找到两个以上数字的LCM
查找给定N数的LCM的C ++程序
答案 0 :(得分:3)
int lcm(int a, int b) { return (a/gcd(a,b))*b; }
gcd
查看Euclid algorithm。
对于超过2个数字,请在下一个数字和前一个数字上迭代使用lcm
。在代码中:
int lcms(int l int * a)
{
int i, result;
result = 1;
for (i = 0; i < l; i++) result = lcm(result, a[i]);
return result;
}
答案 1 :(得分:0)
将N个数字存储在整数指针中,并递归调用找到LCM的方法。 如果你知道N有多大,你可以用一个循环来做。 由于过度使用,您可以使用:
int lcm(int a, int b) { return (a/gcd(a,b))*b; }
答案 2 :(得分:0)
这个答案的基础是
num1 * num2 = lcm(num1,num2)* gcd(num1,num2) 所以我认为代码应该像这样
int gcd(int num1, int num2){
while(num1 != num2){
if(num1 > num2)
num1 -= num2;
else
num2 -= num1;
}
return num1;
}
int lcm(int num1, int num2){
return (num1/gcd(num1, num2))*num2; // as mentioned by Bryan above.
}
int main(void){
int i =0, result = 1;
for(i=2 ;i<=n; i++){ // n is the upper limit
// be sure to check limits of data types.
result= lcm(result, i);
}
// print the result;
return 0;
}
我刚刚重新解释了bryan给出的答案,我正在解决project-euler的问题5,想到了即兴的答案。 :)