Нахождение LCM двух номеров в C - PullRequest
0 голосов
/ 29 сентября 2018

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

#include<stdio.h>
#include<conio.h>

main()
{
int i, j, a, b, lcm;

printf("Enter two nos : ");
scanf("%d %d", &a, &b);

for(i=1; i<=b; i++)
{
    for(j=1; j<=a; j++)
    {
        if(a*i==b*j)
        {
            lcm=a*i;
            break;
        }
    }
}
printf("LCM=%d", lcm);

getch();
}

1 Ответ

0 голосов
/ 29 сентября 2018

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);
}

Существуют более элегантные и более общие методы, но я думаю, что примервыше довольно легко следовать.

...