刚才看了一些求最大公约数和最小公倍数的方法。就想着用Java实现一下,下面我将总结几种方法,以便以后查阅。

求最大公约数:比如说求(m,n)两个数的最大公约数

(1)连续整数检测算法:

a.先找出m,n两个数中最小的数,比如说两个数中最小的为n,将n的值赋给另一个整数(比如gcd);

b.判断m和n两个整数能否被temp整除,如果m和n两个整数任意一个不能被gcd整除进行c步骤,否则进行d步骤

c.gcd--,然后继续进行第二步;

d.返回gcd即为所求最大公约数。

代码如下:

193221593.jpg

193601458.jpg

(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即为所求最大公约数。

代码如下:

200739641.jpg

求最小公倍数:比如说求m和n的最小公倍数。

公式法:m*n=最大公约数*最小公倍数.

代码如下:

214626435.jpg