Java解决最大公约数问题、枚举法、辗转相除递归法

目录

问题重述

方法一:暴力穷举法

方法介绍

源代码

试运行结果

算法特点

方法二:辗转相除递归法

方法介绍

源代码

试运行结果

算法特点


问题重述

最大公因数:也称最大公约数,是数学词汇,指能够整除多个整数的最大正整数,而多个整数不能都为零。

例如:8和12的最大公因数为4

方法一:穷举法

方法介绍

把从1开始到两个数中较小数之间,都通过程序跑一遍,其中能被两个数整除且最大的数就是两个数的最大公约数。

源代码

  public static void main(String[] args) {
         //接收键入
         Scanner in = new Scanner(System.in);
         System.out.println("求两个数的最大公约数:");
         System.out.println("请输入两个数:");
         int A = in.nextInt();
         int B = in.nextInt();
         //判断A、B大小,取小的值进行for循环
         int s = A;
         if (A>B){
             s = B;
         }
         //不满足两数除2为0的直接输出1,否者A、B中较小的数作为for循环的限制,然后 i在[i,s]之间递增至最大公约数结束。
         int jg =1;
         for ( int i=2; i<=s;++i){
             if (A%i == 0 && B%i  == 0){    //其实是运行了s-i+1次
                 jg = i;
             }
         }
         System.out.println(A+"和"+B+"的最大公约数是"+jg);
     }

试运行结果

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_11,color_FFFFFF,t_70,g_se,x_16

算法特点

  • 算法的时间复杂度高

  • 方法笨,思路很清晰

方法二:辗转相除递归法

方法介绍

  • 在数学中,辗转相除法,又称欧几里得算法,最大公约数是算法。辗转相除法首次出现于欧几里得的《几何原本》,而在中国则可以追溯至东汉出现的《九章算术》。

  • 原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。

  • 例如:24和18的最大公约数是6(24 ÷ 18 余6,然后18 ÷ 6余0,所以6就是18和6的最大公约数,那么6也是24和18的最大公约数)

源代码

  public static void main(String[] args) {
         //接收键入
         Scanner in = new Scanner(System.in);
         System.out.println("求两个数的最大公约数:");
         System.out.println("请输入两个数:");
         int A = in.nextInt();
         int B = in.nextInt();
         //先定义变量
         int C;
         int D;
         int i ;
         //用较大的数除较小的数,余数为零,则输出被除数就是两个整数的最大公约数;余数不为零则把被除数当做除数,把余数当做被除数继续除,直到余数为零结束
         if (A>B){
 ​
             for (i=1;A%B!=0;i++){
                 C = A%B;
                 A = B;
                 B = C;
             }
             System.out.println("最大公约数是"+B);
         }else {
             for (i=1;B%A!=0;i++){
                 D = B%A;
                 B = A;
                 A = D;
             }
             System.out.println("最大公约数是"+A);
         }
     }

试运行结果

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASU3msaTlp4blh6_nibk=,size_11,color_FFFFFF,t_70,g_se,x_16

算法特点

  • 运用辗转相除递归法运行相对高效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IM汤姆凯特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值