刚才看了一些求最大公约数和最小公倍数的方法。就想着用Java实现一下,下面我将总结几种方法,以便以后查阅。
求最大公约数:比如说求(m,n)两个数的最大公约数
(1)连续整数检测算法:
a.先找出m,n两个数中最小的数,比如说两个数中最小的为n,将n的值赋给另一个整数(比如gcd);
b.判断m和n两个整数能否被temp整除,如果m和n两个整数任意一个不能被gcd整除进行c步骤,否则进行d步骤;
c.gcd--,然后继续进行第二步;
d.返回gcd即为所求最大公约数。
代码如下:
(2)辗转相除法:又叫欧几里德算法,是求两个正整数的最大公因子的方法。
辗转相除法是基于以下两个性质的:
A.(a,b)=(a,ka+b),其中a、b、k都为自然数,此处(a,b)表示a,b两个正整数的最大公约数,同理(a,ka+b).
假设p是(a,ka+b)的公约数,p整除a,也整除ka+b,那么就必定整除b,所以p又是a和b的公约数,因此(a,b)和(a,ka+b)的最大公约数也相等。
B.(0,a)=a
辗转相除法的步骤:
a.判断n是否为0, 是则执行c步骤,否则执行b步骤;
b.将m%n的值赋给gcd,将n的值赋给m,将gcd的值赋给n;
c.返回gcd即为所求最大公约数。
代码如下:
求最小公倍数:比如说求m和n的最小公倍数。
公式法:m*n=最大公约数*最小公倍数.
代码如下:
转载于:https://blog.51cto.com/6137649/1317422