求两个数最大公约数的三种方法(java实现)

运行以下代码需要导入java.util.Scanner包,即在代码中加如下代码:

import java.util.Scanner;

 

1.相减法

两个数,相等时,最大公约数为他们其中任意一个。不相等时,用大数减小数。得到的差和之前的那个小数再次相减,直到两个数相等,这两个中,任意一个都是最大公约数。(代码如下)

        int m,n;
        //从键盘输入m、n的值
        Scanner scanner = new Scanner(System.in);
        m = scanner.nextInt();
        n = scanner.nextInt();
        
        //相减法
        while((m-n)!=0) {
            if(m>n) {
                m = m-n;
            }else {
                n = n-m;
            }
        }
        //输出m或n都可以
        System.out.println("最大公约数是:"+m);            

 

2.穷举法

如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。(代码如下)

     int m,n;
        //从键盘输入m、n的值
        Scanner scanner = new Scanner(System.in);
        m = scanner.nextInt();
        n = scanner.nextInt();
        //穷举法
        if(m>=n) {
            for(int i=n;i>=1;i--) {
                if((m%i)==0&&(n%i)==0) {
                    //输出m或n都可以
                    System.out.println("最大公约数是:"+m);
                    break;//找到最大公约数后跳出循环
                }
            }
        }else {
            for(int j=m;j>=1;j++) {
                if((m%j)==0&&(n%j)==0) {
                    //输出m或n都可以
                    System.out.println("最大公约数是:"+m);
                    break;//找到最大公约数后跳出循环
                }
            }
        }

3.辗转相除法

用大数对小数求余,若余数为0,则除数为最大公约数。若余数不为0,将此余数作为除数,小数作为被除数,重新求余,直到余数为0为止。此时的最大公约数为余数。例如:27和6.  27%6=3.  6%3=0.  所以最大公约数为3.(代码如下)

     int m,n;
        //从键盘输入m、n的值
        Scanner scanner = new Scanner(System.in);
        m = scanner.nextInt();
        n = scanner.nextInt();
        //辗转相除法
        if(m>=n) {
            int x = m%n;
            while(x!=0) {
                m=n;
                n=x;
                x=m%n;
            }
            //输出m或n都可以
            System.out.println("最大公约数是:"+m);
        }else {
            int y = n%m;
            while(y!=0) {
                n=m;
                m=y;
                y=n%m;
            }
            //输出m或n都可以
            System.out.println("最大公约数是:"+m);
        }
    }

 

原文链接:https://blog.csdn.net/yuemeicheng/article/details/81204864

 

posted @ 2021-03-04 21:37  要不要买菜  阅读(6473)  评论(0编辑  收藏  举报