求解一些数字的最大公约数和最小公倍数的方法自然或多或少的会一两种,那么我要做的是将这些方法先归纳一下,让自己以后再使用的时候能够直接的联想起来,那么这篇笔记就成功了。
虽然大牛总计的已经很漂亮了,但是只有自己真正的总结过才是自己的东西。
那么接下来就是方法的记录:
1.辗转相除法
相信这个方法是大家从小就用到大的,给你两个数A和B,要你求解这两个数的最小公倍数或者最大公约数。
①A和B之间是存在着大小关系的,如果是相等的那么(哈哈),恭喜你,这就不用就求解了,运用辗转相除法要让A大于B,进行A%B的运算(求余),让这个结果等于C。
②判断这个C是否为零,如果为零,那么B就是这两个数的最大公约数,如果不为零那么就让A=B,B=C,互相的进行交换,然后进行第一步,直到这个结果C等于零。
③当C等于零的时候就可以得出这个方法的结果,即B就是这两个数的最大公约数。
例如 7 和 3
①7 (A)% 3(B) = 1(C)
②1!= 0,则3(A) % 1(B)= 3(C),继续进行1(A) % 3(B) = 0(C),这个时候C就等于 0了
③那么结果就是B的值 1.
代码如下:
int
LCD(int a,int b) //最大公约数的求法
{
int c;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
求出了两个数的最大公约数,那么这里就可以介绍一下最小公倍数和最大公约数的关系了,当你求出了两个数的最大公约数,那么最小公倍数就是这两个数的乘积除以最大公约数。即(A*B)/LCD所得即为最小公倍数。(突出重点)
上面的程序运行结果很明显的展示了这个代码模板的正确性。
2.
有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①
代码如下:
int LCD(int a,int b)
{
while(a!=b)
{
if(a>b) a=a-b;
else b=b-a;
}
}
代码的主要部分很简单,看运行结果
这样就记录了两种求解的方法和代码,好像忘记讲解最大公约数和最小公倍数的关系了。看突出部分。哈哈
不对还有就是辗转相除的时间复杂度是log2(n)。至于解释。。。。。请听下会分解。