人之所以痛苦,那是因为你在成长。--------magic_guo
首先我们来了解一下定义:
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数
最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个
最小公倍数 = 两整数的乘积÷最大公约数
所以我们先来求两个数的最大公约数:
主函数:
# include<stdio.h>
//最大公约数,指两个或多个整数共有的约数中最大的一个
int main(void)
{
int hcp1(int, int); //对于函数的前置声明
int hcp2(int, int); //对于函数的前置声明
int hcp3(int, int); //对于函数的前置声明
int a, b, m;
printf("请输入两个整数,求其最大公约数:");
scanf("%d %d", &a, &b);
m = hcp2(a, b); //调用其中的一种方法
printf("%d和%d的最大公约数为:%d\n", a, b, m);
return 0;
}
1.辗转相除法
流程图如下:
话不多说直接上代码:
//辗转法求最大公约数
int hcp1(int a, int b)
{
int c;
while(b!=0) //判断b是否为0,其实还是判断了a%b的值。
{
c = a%b; //将a%b的值赋给c
a = b; //将b的值赋给a
b = c; //将c的值赋给b
}
return a; //当a%b的值为0时,跳出循环,返回的是b的值,在上面已经赋给了a
}
2.辗转相减法
<图片画了好久感觉还是不满意,,,就不上图了>
//辗转相减法求最大公约数
int hcp3(int a, int b)
{
while(a!=b) //使用a和b相减(大数减小数),直至a=b,停止循环
{
if (a>b) //判断a和b的大小
a = a-b; //将a-b的值赋给a,再进行比较
else
b = b-a; //如果a小于b,则将b-a的值赋给b,再进行比较
}
return a; //返回a或者b都是可以的,最后a=b
}
3.穷举法
流程图如下:
代码:
//穷举法求最大公约数
int hcp2(int a, int b)
{
int i;
for (i=a; i>0; i--) //将a或b的值赋给i,从i开始递减循环,直至找到最大公约数
if (a%i==0 && b%i==0) //当a%i和b%i的值都为0时,i即为a和b的最大公约数
break;
return i;
}
最小公倍数:
上面的公式已经给出,求出最大公约数,使用两个数的积除以最大公约数即可得。
只用调用一下求最大公约数的函数即可,
读者自行思考一下。