LCM двух чисел a, b, по крайней мере, max (a, b) и самое большее a * b, поэтому ваше первое представление о границах верно.Но если вы присмотритесь к одному из определений LCM (из двух натуральных чисел) a и b, вы обнаружите, что LCM - это наименьшее число, такое, что LCM% a = 0 и LCM% b = 0, где "%"означает" остаток от целочисленного деления, усечения ", и это именно то, что вы можете использовать здесь.
Пример:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, b, lcm;
printf("Enter two nos : ");
scanf("%d %d", &a, &b);
/* TODO: checks and balances! */
/* Set lcm to the larger of the two numbers */
lcm = (a < b) ? b : a;
/* check if both "a" and "b" divide "lcm" without a remainder
* otherwise increment "lcm" */
for (;;) {
if ((lcm % a == 0) && (lcm % b == 0)) {
/* we got the LCM, break out of loop */
break;
}
/* Otherwise increment "lcm" by one */
lcm++;
}
printf("LCM = %d\n", lcm);
exit(EXIT_SUCCESS);
}
Существуют более элегантные и более общие методы, но я думаю, что примервыше довольно легко следовать.