news 2026/3/22 8:57:22

蓝桥java求最大公约数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝桥java求最大公约数

一. 什么是最大公约数(GCD)

最大公约数(Greatest Common Divisor)是指两个或多个整数共有约数中最大的一个。例如:

  • 12 和 18 的公约数有 1, 2, 3, 6,其中最大的是 6

  • 所以 gcd(12, 18) = 6

二. 方法一:辗转相除法(欧几里得算法)

1.这是最经典的求最大公约数的方法,基于以下原理:

两个数的最大公约数等于较大数除以较小数的余数较小数的最大公约数

gcd(a, b) = gcd(b, a % b)

其中 a % b 表示 a 除以 b 的余数。

2.举个例子

求 gcd(12, 18)

  1. gcd(12, 18) = gcd(18, 12) // 先确保第一个数大

  2. 18 ÷ 12 = 1 余 6

  3. gcd(18, 12) = gcd(12, 6) // 应用公式

  4. 12 ÷ 6 = 2 余 0

  5. gcd(12, 6) = gcd(6, 0)

  6. 当第二个数为0时,第一个数就是答案:6

三.现在看代码的详细解释

方法1.1:循环实现

public static int gcd1(int a, int b) { // 确保a >= b if (a < b) { int temp = a; // 临时变量保存a的值 a = b; // 把b的值赋给a b = temp; // 把原来a的值赋给b } // 执行到这里,a一定是较大的数,b是较小的数 // 辗转相除 while (b != 0) { // 当b不等于0时继续循环 int remainder = a % b; // 求a除以b的余数 a = b; // 把b的值赋给a b = remainder; // 把余数赋给b } return a; // 当b=0时,a就是最大公约数 }

用例子走一遍:计算 gcd1(12, 18)

  1. 输入 a=12, b=18

  2. 因为 12 < 18,交换:a=18, b=12

  3. 进入while循环:

    • 第一次循环:b=12≠0

      • remainder = 18 % 12 = 6

      • a = 12

      • b = 6

    • 第二次循环:b=6≠0

      • remainder = 12 % 6 = 0

      • a = 6

      • b = 0

    • 第三次:b=0,退出循环

  4. 返回 a=6

方法1.2:递归实现

public static int gcd2(int a, int b) { if (b == 0) { // 终止条件:当b=0时 return a; // a就是最大公约数 } return gcd2(b, a % b); // 递归调用:用(b, a%b)继续计算 }

递归的思考方式

  1. 把大问题分解成小问题

  2. 每次递归都让问题变小一点

  3. 直到遇到最简单的情况(b=0)

用例子走一遍:计算 gcd2(12, 18)

  1. 第一次调用:gcd2(12, 18)

    • b=18≠0,不返回a

    • 调用 gcd2(18, 12%18) 即 gcd2(18, 12)

  2. 第二次调用:gcd2(18, 12)

    • b=12≠0

    • 调用 gcd2(12, 18%12) 即 gcd2(12, 6)

  3. 第三次调用:gcd2(12, 6)

    • b=6≠0

    • 调用 gcd2(6, 12%6) 即 gcd2(6, 0)

  4. 第四次调用:gcd2(6, 0)

    • b=0 ✓

    • 返回 a=6

  5. 结果层层返回:6 ← 6 ← 6 ← 6


四.再看测试代码

public static void main(String[] args) { int a = 12; int b = 18; // 测试两种方法 System.out.println("gcd1(" + a + ", " + b + ") = " + gcd1(a, b)); System.out.println("gcd2(" + a + ", " + b + ") = " + gcd2(a, b)); // 更多测试 System.out.println("\n更多测试:"); System.out.println("gcd(24, 36) = " + gcd2(24, 36)); // 应该是12 System.out.println("gcd(17, 13) = " + gcd2(17, 13)); // 两个质数,应该是1 System.out.println("gcd(100, 0) = " + gcd2(100, 0)); // 一个数为0,应该是100 }

理解:

辗转相除法就像"以大换小"的游戏

  1. 用大数除以小数,得到余数

  2. 原来的小数变成新的"大数"

  3. 余数变成新的"小数"

  4. 重复直到余数为0

  5. 最后的小数就是答案

用 gcd(12, 18) 来说:

开始:大=18, 小=12
18 ÷ 12 = 1 余 6 → 新大=12, 新小=6
12 ÷ 6 = 2 余 0 → 余数为0,停止
答案就是最后的小数:6

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 12:38:53

Verilog 概述

Verilog 概述 Verilog 是一种硬件描述语言&#xff08;Hardware Description Language&#xff0c;HDL&#xff09;&#xff0c;用于描述数字电路的行为和结构。它广泛应用于 FPGA、ASIC&#xff08;专用集成电路&#xff09;的设计流程中。Verilog 的设计流程通常包括设计、仿…

作者头像 李华
网站建设 2026/3/15 16:26:34

导师推荐8个AI论文工具,继续教育学生轻松搞定毕业论文!

导师推荐8个AI论文工具&#xff0c;继续教育学生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;高效降重成新趋势 在当前的学术环境中&#xff0c;越来越多的继续教育学生开始借助 AI 工具来提升论文写作效率。尤其是在面对毕业论文时&#xff0c;如何降低 AIG…

作者头像 李华
网站建设 2026/3/15 16:26:37

python基于flask框架的二手手机商城管理系统的设计与开发

目录 摘要 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 摘要 随着电子商务的快速发展&#xff0c;二手商品交易市场逐渐成为消费者关注的焦点&#xff0c;尤其是二手手机因其高性价比受…

作者头像 李华
网站建设 2026/3/18 5:40:08

python基于flask框架的患者病人住院管理系统

目录基于Flask框架的患者住院管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Flask框架的患者住院管理系统摘要 该系统采用Python语言与Flask轻量级框架开发&#xff0c;旨…

作者头像 李华
网站建设 2026/3/15 4:54:59

亲测好用8个一键生成论文工具,自考学生轻松搞定毕业论文!

亲测好用8个一键生成论文工具&#xff0c;自考学生轻松搞定毕业论文&#xff01; AI 工具如何成为自考论文的得力助手&#xff1f; 对于自考学生来说&#xff0c;撰写毕业论文常常是一项既耗时又充满挑战的任务。从选题到资料收集&#xff0c;再到结构搭建和内容撰写&#xff0…

作者头像 李华
网站建设 2026/3/15 16:26:34

C语言造轮子大赛:从零打造高性能轮子

技术文章大纲&#xff1a;C语言造轮子大赛引言简述“造轮子”在编程中的意义&#xff0c;强调通过重新实现基础功能加深对底层原理的理解。介绍C语言在系统编程和性能优化中的独特优势&#xff0c;说明为何选择C语言作为大赛语言。大赛背景与目标分析现代开发中过度依赖现成库的…

作者头像 李华