zoukankan      html  css  js  c++  java
  • 求两个数最大公约数的三种方法(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

    文章里如果有错误的地方还望朋友指出,谢谢
  • 相关阅读:
    【Tools】xshell添加命令按钮Button
    【Optimization】ARM的寻址方式(详细)
    【Python】python文件或文本加密(4种方法)
    【Optimization】常用SSE Intrinsic指令总结
    【Optimization】X86汇编快速入门
    【Base】如何理解Latency和Throughput: 吞吐量和延迟
    【Cmd】Windows下批处理常用命令总结
    【Optimization】SSE指令集学习:Compiler Intrinsic
    【ASM】汇编指令movdqa与movdqu的区别
    anaconda
  • 原文地址:https://www.cnblogs.com/dqccc/p/14483132.html
Copyright © 2011-2022 走看看