java求两个整数的最大公约数(辗转相除法)以及最小公倍数

 最大公约数:辗转相除法

辗转相除法又叫欧几里得算法,是欧几里得最先提出来的.辗转相除法的实现,是基于下面的原理:

不妨设 (a,b)表示 a 和 b 的最大公约数

(a, b) = (a, ka+b),其中a、b、k都为自然数.………………

也就是说,两个数的最大公约数,将其中一个数加另一个数,得到的新数,其公约数不变

比如(4,6)=(4+6,6)=(4,6+2×4)=2

原理证明

如果 p 是 a 和 ka+b 的最大公约数,p 能被 a 整除,也能被 ka+b 整除,那么就必定能被 b 整除

所以p 又是 a 和 b 的最大公约数,从而证明他们的最大公约数也是相等的。

基于上面的原理,就能实现我们的迭代相减法

(78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2

基本上思路就是大数减去小数,一直减到能算出来为止,在作为练习的时候,往往进行到某一步就已经可以看出得值。迭代相减法简单,不过步数比较多,实际上我们可以看到,在上面的过程中,从(78,14)到(8,14)完全可以一步到位。                                因为(78,14)=(14×5+8,14)=(8,14),由此就诞生出我们的辗转相除法

最小公倍数

求出最大公约数后,两个数相乘,除以最大公约数即可。

/**
 * Main_14_great_common_divisor
 * 求两个数的最大公约数 greatest common divisor
 * 求多个数的最大公约数
 */
import java.util.Scanner;
public class Main_14_great_common_divisor 
{

    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        int j = sc.nextInt();
        int great_common_divisor = gcd(i, j);
        System.out.println("输入的80和15的最大的公约数为:" + great_common_divisor);
        int least_common_multiply = i*j/great_common_divisor;//最小公倍数
        System.out.println("80和15的最小的公倍数为:" + least_common_multiply);
        int [] array = {3, 21, 93};
        System.out.println("数组的最大公约数为:"+gcdArray(array));
        sc.close();
    }

    //最大公约数 greatest common divisor
    //利用辗转相除法
    public static int gcd(int a, int b)
    {
        /*递归法
        if(b == 0)
            return a;
        return gcd(b, a%b);
        */

        //非递归实现
        while(b != 0)
        {
            int remainder = a % b;  //定义余数remainder
            a = b;
            b = remainder;
        }
        return a;
    }
    // n个整数的最大公约数
    // arr[0] ---arr[n-1]的最大公约数,等于arr[0]
    // 即gcd(arr[0], arr[1]...,arr[i]) = gcd((arr[i]...(gcd(arr[0], arr[1])))
    public static int gcdArray(int [] arr)
    {
        int temp = arr[0];
        for(int i=1; i

结果为:

80 15
输入的80和15的最大的公约数为:5
80和15的最小的公倍数为:240
数组的最大公约数为:3

 

你可能感兴趣的:(笔试题,commo,最小公倍数)