在C中找到两个不等于的LCM

时间:2018-09-29 15:26:43

标签: c lcm

我创建了一个代码来查找两个No的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 :(得分:0)

两个数字a,b的LCM至少为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);
}

有更优雅,更通用的方法,但是我认为上面的示例很容易理解。