Нахождение наименьшего общего кратного (НОК) двух целых чисел в C

Я пытаюсь использовать следующий код, чтобы найти LCM двух целых чисел в C. Я понятия не имею, почему код покажет мне максимальное количество двух целых чисел вместо их LCM. Я сделал что-то не так?

#include<stdio.h>
int main(){
    int num1, num2;
    printf("Input your number 1:");
    scanf("%d", &num1);
    printf("Input your number 2:");
    scanf("%d", &num2);
    //find max and main
    int max = num1, min = num2;
    if(num1 < num2){
        max = num2;
        min = num1;
    }
    int k = 1, LCM;
    do{
        LCM = max*k;
        k++;
    }while(LCM%min == 0);
    printf("LCM of %d and %d is %d", num1 ,num2, LCM);
}

Вот вывод программы:

Input your number 1:5
Input your number 2:3
LCM of 5 and 3 is 5
Process returned 0 (0x0)   execution time : 1.735 s
Press any key to continue.

c lcm
person itztaylorau    schedule 22.08.2020    source источник
comment
Не могли бы вы предоставить некоторые примеры результатов? Это может облегчить визуализацию проблемы   -  person 89f3a1c    schedule 22.08.2020
comment
Конечно, я уже обновил вопрос.   -  person itztaylorau    schedule 22.08.2020
comment
@itztaylorau the code will show me the maximum number Не всегда, попробуйте, например, 2, 4.   -  person dxiv    schedule 22.08.2020


Ответы (1)


while(LCM%min == 0) проверяет, делится ли LCM на min, и если да, цикл продолжается.

Вместо этого вы должны использовать while(LCM%min != 0), чтобы найти первое кратное max, которое делится на min, и выйти из цикла, когда он будет найден.

person MikeCAT    schedule 22.08.2020