-1

我想找到两个以上数字的 LCM

用于查找给定 N 数的 LCM 的 C++ 程序

4

3 回答 3

3
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;
}
于 2013-04-27T10:22:58.100 回答
0

将您的 N 个数字存储在一个整数指针中并递归调用找到 LCM 的方法。如果你知道 N 有多大,你可以用一个循环来做。由于过度引用,您可以使用:

int lcm(int a, int b) { return (a/gcd(a,b))*b; }
于 2013-04-27T10:28:54.187 回答
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,想在答案上即兴发挥。:)

于 2014-07-09T18:03:53.637 回答