C语言-求两个数的最大公约数和最小公倍数
一:先明白概念(公约数、最大公约数,公倍数、最小公倍数)
1.公约数:
公约数是指能够同时整除两个或多个数的数。具体来说,对于两个数a和b,如果一个数x能够同时整除a和b,那么x就是a和b的公约数。
举个例子,对于数8和12,它们的公约数有1、2和4。因为1可以整除任何数,2可以整除8和12(8除以2等于4,12除以2等于6),4可以整除8和12(8除以4等于2,12除以4等于3)。所以1、2和4都是8和12的公约数。
公约数有两个重要的性质:
1. 公约数一定能整除这些数的倍数。也就是说,如果一个数x是a和b的公约数,那么x也是a、b的倍数c的公约数。例如,对于5和10,它们的公约数有1、5和10,而1、5和10也是它们的倍数15的公约数。
2. 两个数的最大公约数是它们的所有公约数中最大的那个数。最大公约数用来表示两个数之间的最大公共因子。
公约数在数学中有很重要的应用,比如用于化简分数,求解线性方程等。
2.公倍数
最小公倍数=两数的乘积÷最大公约数
公倍数是指同时是两个或多个数的倍数的数。具体来说,对于两个数a和b,如果一个数x能够同时被a和b整除,那么x就是a和b的公倍数。
举个例子,对于数3和4,它们的公倍数有12、24、36等。因为12可以同时被3和4整除(12除以3等于4,12除以4等于3),24也可以同时被3和4整除(24除以3等于8,24除以4等于6),36同样也可以同时被3和4整除(36除以3等于12,36除以4等于9)。所以12、24和36都是3和4的公倍数。
公倍数也有两个重要的性质:
1. 公倍数一定能被这些数的公约数整除。也就是说,如果一个数x是a和b的公倍数,那么x也能被a和b的公约数整除。例如,对于6和9,它们的公倍数有18、36、54等,而18、36和54能同时被6和9所共有的公约数3整除。
2. 两个数的最小公倍数是它们的所有公倍数中最小的那个数。最小公倍数用来表示两个数之间的最小公倍数差。
公倍数也在数学中有重要的应用,比如求解两个周期不同的事件同时发生的问题等。
二:举例子18和5的最大公约数通过辗转相除法
设两数为a和b(a>b),用a除以b,得a÷b=商…余数,
若余数为0 ,则最大公约数为b;
若余数不为0 ,则再用b÷余数,
得b÷余数=商1…余数1,若余数1=0,则最大公约数为余数,
若余数1不为0,继续让商÷余数n,一直到能够余数为零
这时的除数即最大公约数
好的,我们来详细进行辗转相除法来求解18和5的最大公约数。
首先,设18为a,5为b。
1. 用18除以5,得到商3和余数3。(18 ÷ 5 = 3 ... 3)
2. 再用5除以3,得到商1和余数2。(5 ÷ 3 = 1 ... 2)
3. 接着用3除以2,得到商1和余数1。(3 ÷ 2 = 1 ... 1)
4. 最后,用2除以1,得到商2和余数0。(2 ÷ 1 = 2 ... 0)
当余数为0时,最后一次的除数就是18和5的最大公约数。所以,18和5的最大公约数是1。
通过以上过程,我们使用辗转相除法计算出了18和5的最大公约数为1。
三:代码
#include<stdio.h>
//计算最大公约数
int gcd(int a,int b){
if(b == 0)
return a;
else
return gcd(b,a % b);
}
//计算最小公倍数
int lcm(int a, int b){
int gcd_result = gcd(a,b);
return (a * b )/gcd_result;
}
int main()
{
int num1,num2;
printf("请输入两个整数:");
scanf("%d %d",&num1,&num2);
printf("最大公约数为:%d\n",gcd(num1,num2));
printf("最小公倍数为:%d\n",lcm(num1,num2));
return 0;
}
以上