三个数的最小公倍数
扩大倍数法 (代码实现容易)
先列举出这三个数中最大数的倍数,再从这些倍数中找出较少数的倍数,即这两个数的公倍数,从而确定出最小公倍数。
#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);
}
短除法
短除法第一步是用这三个数的公因数去除这三个数
在得到的商中,再用其中两个数的公约数去除,另一个数照抄下来,不变化。直到三个商中每两个数都是互质数为止。
然后把所有的除数和商乘起来,得到的积就是这三个数的最小公倍数。
注意事项
所得的商必须两两互质,就是除了1以外没有其它公因数
参考:
https://jingyan.baidu.com/article/154b46310aee1b28ca8f41ad.html