2016-10-24 2 views
0

Здесь я пытаюсь найти самый низкий общий кратный массива чисел. Я использовал следующую формулу, чтобы найти значение, которое использует наибольший общий делитель, чтобы узнать LCM.найти самый низкий общий множественный

enter image description here

Моя программа вычисляет НОД правильно, но когда дело доходит до выяснить, LCM с помощью НОД он дает неправильный LCM value.What может быть неправильным в моей logic.Any помощь была бы оценена.

#include<stdio.h> 

int main(){ 
    int arr[10]={10,20,30,40,50,60,70,80,90,100}; 
    int GCD=findGCD(arr[0],arr[1]); 
    int LCM=(arr[0]*arr[1])/GCD; 
    int i; 
    for(i=2;i<sizeof(arr)/sizeof(arr[0]);i++){ 
     int temp = GCD; 
     GCD = findGCD(temp,arr[i]); 
     LCM = (temp*arr[i])/GCD; 
    } 
    printf("GCD IS %d AND LCM IS %d",GCD,LCM); 

} 

int findGCD(int num1,int num2){ 
    if(num2 == 0){ 
     return num1; 
    } 
    if(num1%num2 == 0){ 

     return num2; 
    } 
    return findGCD(num2,num1%num2); 
} 
+1

НОД и LCM чего и что? – user3528438

+1

Просьба показать пример ожидаемого и фактического вывода. –

+3

'int arr [10] = {49,21,7,14,28,42,35,49,56,70,64};' должно быть 'int arr [11] = {49,21,7,14 , 28,42,35,49,56,70,64}; ' –

ответ

0

Помогает ли это? Или была ваша цель рассчитать GCD и LCM при одновременном вызове findGCD в кратчайшие сроки?

int main(){ 
    int arr[10]={10,20,30,40,50,60,70,80,90,100}; 
    int GCD=arr[0]; 
    int LCM=arr[0]; 
    int i; 

    for(i=1;i<sizeof(arr)/sizeof(arr[0]);i++){ 
     GCD = findGCD(GCD,arr[i]); 
     LCM = (LCM * arr[i])/findGCD(LCM, arr[i]); 
    } 

    printf("GCD IS %d AND LCM IS %d",GCD,LCM); 
} 
0

Вышеупомянутая формула, указанная вами, верна только для двух чисел, а не нескольких чисел (в вашем случае 10). Правильная формула сказать 3 чисел:

lcm(a,b,c)=abc/gcd(ab,bc,ca) 

Для получения дополнительной информации см это https://math.stackexchange.com/questions/319297/gcd-to-lcm-of-multiple-numbers

Смежные вопросы