求最大公约数和最小公倍数
如果数a能被数b整除,a就叫做b的倍数,b就叫做作a的约数.约数和倍数都表示一个数与另一个数的关系,不能单独存在.如只能说16是某数的倍数,2是某数的约数,而不能孤立地说16是倍数,2是约数.
“倍”与“倍数”是不同的两个概念,“倍”是指两个数相除的商,它可以是整数、小数或者分数.“倍数”只是在数的整除范围内,相对于“约数”而言的一个数字概念,表示的是能被某一个自然数整除的数,它必须是一个自然数.
几个自然数公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数.例如12,16的公约数有1,2,4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16)=4.12,15,18的最大公约数是3,记为(12,15,18)=3.
常用的求最大公约数的方法是分解质因数法和短除法.
分解质因数法,把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数.例如,求24和60的最大公约数.24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2,2和3,它们的积是2×2×3=12,所以(24,60)=12.
短除法,先用这几个数的公约数连续去除,一直除到所有的商互质为止,然后把所有的除数连乘起来,所得的积就是这几数的最大公约数.例如,求24,48,60的最大的公约数.(24,48,60)=2×3×2=12
几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个,叫做这几个数的最小公倍数.例如4的倍数有4,8,12,16,……,6的倍数有6,12,18,24,4和6的公倍数有12,24,……,其中最小的是12,一般记为[4,6]=12.12,15,18的最小公倍数是180,记为[12,15,18]=180.
常用的求最小公倍数的方法:
一、两数相乘法。
如果两个数是互质数。那么它们的最小公倍数就是这两个数的乘积。例如:4和7的最小公倍数就是4×7=28。
质数:就是在所有比1大的整数中,除了1和它本身以外,不再有别的约数,这种整数叫做质数,质数又叫做素数。
二、找大数法。
如果两个数有倍数关系。那么较大的数就是这两个数的最小公倍数。例如:3和15的最小公倍数就是较大数15。
三、扩大法
如果两数不是互质,也没有倍数关系时,可以把较大数依次扩大2倍、3倍、……看扩大到哪个数时最先成为较小数的倍数时,这个数就是这两个数的最小公倍数。例如:18和30的最小公倍数,就是把30扩大2倍得60,60不是18的倍数;再把30扩大3倍得90,90是18的倍数,那么90就是18和30的最小公倍数。
四、两数的乘积再除以两数的最大公约数法。
这个方法虽然比较复杂,但是使用范围很广。因为两个数的乘积等于这两个数的最大公约数和最小公倍数的乘积。例如:4和6的最大公约数是2,最小公倍数是12,那么,4×6=2×12。为了便于口算,我们可以把两个数中的任意一个数先除以它们的最大公约数,然后再和另一个数相乘。例如:18和30的最大公约数是6,要求18和30的最小公倍数时,可以先用18除以6得3,再用3和30相乘得90;或者先用30除以6得5,再用5和18相乘得90。这90就是18和30的最小公倍数。
输入两个正整数m和n,求其最大公约数和最小公倍数。C语言编程如下:
#include<stdio.h>
void main(){
int m,n,max,min,swap;
printf("please input two numbers m,n:");
scanf("%d,%d",&m,&n);
if(m>0&&n>0){
max=m>n?m:n;
min=m<n?m:n;
swap=max%min;
while(swap!=0){
max=min;
min=swap;
swap=max%min;
}
printf("Greatest common divisor:%d\n",min);
printf("Lease common multiple:%d\n",m*n/min);
}
else printf("Error!\n");
}