/*
时间:2017年6月30日20:14:33
功能:求三个数的最大公约数与最小公倍数
*/
# include <stdio.h>
main()
{
int x, y, z, a, b, min, max;
printf("请输入三个整数以空格分隔:");
scanf("%d %d %d", &x,&y,&z);
if(x<y)
{
min = x; max = y;
}
else
{
min = y; max = x;
}
if(min>z)
min = z; //求出三个数中最小数,赋给a;
if(max<z)
max = z; //求出三个数中最大数,赋给b;
for(a=min;a>=1;a--) //(最大公约数不可能大于三个数中的最小数)用这三数去除以a,a的值每次-1;
//也可以(a=1;a>=1;a++),或者(a=min;a<=min;a--)
{
if(x%a==0 && y%a==0 && z%a==0) //当三个数同时被a整除,此时a的值就是三个数的最大公约数;
break; // 停止a穷举;
}
for(b = max;;b++) //(最小公倍数不会小于三个数中的最大数),起点用max赋值,可以减少无意义的穷举;
//(b = max;;b++)分号之间可以写做(b = max;b>=max;b++)留空也一样,但不能省略;号。
{
if(b%x==0 && b%y==0 && b%z==0) //当b能被x、y、z同时整除,此时b的值就是三个数的最小公倍数;
break; // 停止b穷举;
}
printf("\n这三个数的最小数是:%d,最大数是:%d。\n", min, max);
printf("\n最大公约数是%d,最小公倍数是%d。\n\n", a, b);
}
/*
在VC++6.0中执行的结果如下:
-------------------------
请输入三个整数以空格分隔:1 5 6
这三个数的最小数是:1,最大数是:6。
最大公约数是1,最小公倍数是30。
-------------------------
*/
/*
2017年6月30日20:06:15
求两个数的最大公约数-辗转相除法。
*/
# include <stdio.h>
int main(void)
{
int m, n, a, b, t;
printf("请入要求的两个数,以空格分隔: m,n:");
scanf("%d %d",&m, &n);
if (m<n)
{
t = m;m = n;n = t; // 先交换大小,保证被除数为大,除数为小;
}
a = m; b = n;
do
{
t=a%b; //用大数除小数,得出余数;
a = b; //将除数(小数)赋为被除数;
b = t; //余数赋为除数,直到余数为0时跳出循环;
}
while(b!=0); //也可以写成while(t!=0);
printf("最大公约数为:%d\n", a); //a的值即为最大公约数;
printf("最小公倍数为:%d\n", m*n/a);
return 0;
}
原文:http://www.cnblogs.com/wxt19941024/p/7100533.html