三个数的最小公倍数

扩大倍数法 (代码实现容易)

先列举出这三个数中最大数的倍数,再从这些倍数中找出较少数的倍数,即这两个数的公倍数,从而确定出最小公倍数

image

#include<stdio.h>
int max(int a,int b,int c)  //自定义函数max
{
  if(a>b&&a>c)            // 若a的值最大
      return a;           // 返回a
  else if(b>a&&b>c)       // 若b的值最大
      return b;           // 返回b
  else
      return c;           //   否则返回c
}
void main()
{
  int x,y,z,i,j,k;
  printf("请输入三个数:");
  scanf("%d%d%d",&x,&y,&z); // 从键盘输入三个数
  k = max(x,y,z);          //调用max函数求出其中的最大值
  i= 1;
  while(1)                 //while循环,条件值为1
  { 
    j = k * i;
    if((j%x==0) && (j%y==0) && (j%z==0)) //满足条件,退出循环
        break;
    i++;
  }
  printf("最小公倍数为%d\n",j);
}



先求两个数的最小公倍数,然后利用函数的嵌套求这三个数的最小公倍数

两个数的最小公倍数 = 两数乘积 / 最大公约数

可以用辗转相除 求 最大公约数
http://t.csdn.cn/mrUEN

 #include<stdio.h>
int f(int x,int y)
{
  int a, b, c;
  a = x;
  b = y;
  c = x%y;
  while(c!=0)
  {
    x = y;
    y = c;
    c = x%y;
  }
  // 此时 y 是 最大公约数
  return a*b/y;	// 最小公倍数 = 两数乘积 / 最大公约数
}
void main()
{
    int a , b , c , d;
    printf("请输入三个数:");
    scanf("%d%d%d",&a,&b,&c);
    d = f( f(a,b),c);          //嵌套调用函数f()求解
    printf("最小公倍数为:%d\n",d);
} 


短除法

短除法第一步是用这三个数的公因数去除这三个数
image

在得到的商中,再用其中两个数的公约数去除,另一个数照抄下来,不变化。直到三个商中每两个数都是互质数为止。
image

然后把所有的除数和商乘起来,得到的积就是这三个数的最小公倍数。
image

注意事项
所得的商必须两两互质,就是除了1以外没有其它公因数


参考:
https://jingyan.baidu.com/article/154b46310aee1b28ca8f41ad.html

posted @ 2022-09-01 14:37  麦克斯的园丁  阅读(845)  评论(0编辑  收藏  举报