前言:上一篇我们讲了求两个数的最大公约数;这一篇我们来讲讲怎么求最小公倍数?
--------------------------------------------------------求最小公倍数
1.暴力求解法
解析:这个方法的思路是和求最大公约数的思路是类似的;两个数(暂定m, n)的最大公约数必然>=两个数之间的最大数(暂定max);那么:
第一步:我们就要求出两个数之间的最大数;当然也是用三目运算符比较简单!!!
第二步:我们就要写个死循环while(1),直到(max%m == 0 && max%n == 0 )才跳出循环;如果没满足上面的条件,就让max++;继续执行循环;直到满足条件,break跳出循环就好啦。
下面看代码:
2.试乘取余法
解析:同样暂定两个数(m, n);最小公倍数肯定是这个数(暂定为tmp);tmp%m == 0 && tmp %n ==0 条件都是满足的;那么我们反过来想,就是(m*一个数)%n == 0 必然是满足条件的;例如:
1. 如果m>n;m=20 n=15;m*(一个数(i),这个数是从1开始的,每次循环+1)%n == 0;我们需要找这个满足条件的数,这里就可以看出,数 i=3 满足条件,此时(m*i) % n=====>(20*3) % 15 == 0 ;在打印出m*i即可。
2. 如果m<n;m=15 n=20;也是和上面的思路一样的,不过此时,数 i=4 才满足条件,此时(m*i) % n=====>(15*4) % 20 == 0 ;在打印出m*i即可。
所以,不论m , n两个数谁大谁小都是没问题的。主要就是这个循环怎么写呢?
下面看代码:
3.先求出最大公约数,再求最小公倍数
解析:我们是否想过两个数(m,n)的最大公约数和最小公倍数,四者之间有什么关系呢?下面直接给出结果吧!!!
最小公倍数 = (m*n) / 最大公约数 ;如果不太理解,可以自己举两个具体的数,带入验证一下
例如:m=8 n=12 ====>其最大公约数是:4 ;那么最小公倍数就是:(m*n) /4 = 24;完全是没问题的;所以这里方法就多了,你有多少方法求最大公约数,你就至少有多少种方法求最小公倍数;但它们总的来说,都是一类;下面看其中一个方法:
注意: 咦,在第二步,我为什么又创建两个临时变量tmp_m = m , tmp_n = n;直接用原来的数不就好了吗?但是我们最终打印的结果用到了原来的数据(m ,n);如果直接使用数据,经过循环,m和n的值是一直变化的,怎么找到原来m,n的值?所以你想明白了吗?
当然你也可以在刚开始的输入两个数后,就定义一个变量(int ret = m* n);记住初始的状态,这样就不用在定义临时变量直接用就可以了,最终打印 (ret / n)就可以了;这个留给读者自己去操作吧。
建议:如果你写的代码没有达到你预想的结果,比如上面这个例题,怎么办?去问别人或者百度?
当然是说no;最好的方法就是要自己去调试啦!!!在调试中你就会发现你的错误,而且更加的印象深刻,不要盲目询问;效率并不高!!!!
好了,到此为止,我目前已知的三种方法讲完了,你学到了吗?这是我写的第二遍博客,通过这两篇的试水,已经渐渐熟悉了;以后开始正式写博客,由浅入深,由简到难;欢迎交流学习!