我想找到两个以上数字的 LCM
用于查找给定 N 数的 LCM 的 C++ 程序
int lcm(int a, int b) { return (a/gcd(a,b))*b; }
gcd
看看欧几里得算法。对于超过 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;
}
将您的 N 个数字存储在一个整数指针中并递归调用找到 LCM 的方法。如果你知道 N 有多大,你可以用一个循环来做。由于过度引用,您可以使用:
int lcm(int a, int b) { return (a/gcd(a,b))*b; }
这个答案的依据是
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,想在答案上即兴发挥。:)