2013-04-27 37 views

回答

3
int lcm(int a, int b) { return (a/gcd(a,b))*b; } 

的查找LCM对于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

这是两个数字,a和b。这如何帮助那位特别提出'我想要找到两个以上数字的LCM'的原始海报? – NickT 2013-04-27 10:26:41

+0

啊,我错过了两个以上。我添加了一个泛化。 – 2013-04-27 10:35:18

+0

您正在使用未初始化的堆栈变量'result',我们还需要发送第一个和第二个元素是'a [0]'和'a [1]',因此循环应该从** 1 **开始,并且上升到** n **。 'result'应该用'a [0]'来初始化。顺便说一句好的工作。 – ArunMKumar 2014-07-09 17:45:35

0

将您的N个号码存储在整数指针中,并递归调用找到LCM的方法。 如果你知道N有多大,你可以用一个循环来完成。 作为overcitated你可以使用:

int lcm(int a, int b) { return (a/gcd(a,b))*b; } 
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给出了答案,我是解决项目欧拉,即兴对答案的思想problem5。 :)

相关问题