当前位置:首页算法 > 正文

辗转相除法(欧几里得算法)-野牛程序员教少儿编程

作者:野牛程序员:2025-05-10 12:32:12算法阅读 1984
辗转相除法(欧几里得算法)-野牛程序员教少儿编程

🧮 什么是“辗转相除法”?

又称 欧几里得算法(Euclidean Algorithm),是求两个整数最大公约数(GCD) 的经典方法。

✨ 最大公约数:可以同时整除两个数的最大的那个数


🧩 基本原理

对两个数 ab(a ≥ b):

📐 数学公式:

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

直到 b = 0,此时:

gcd(a, 0) = a

⛳ 通俗理解:

两个数求 GCD,可以“不断用大数除以小数”,余数不为 0 就继续换一组,直到余数为 0,此时较小数就是最大公约数


🧰 示例演示(gcd(48,18))

Step 1: gcd(48,18) = gcd(18, 48 % 18 = 12)
Step 2: gcd(18,12) = gcd(12, 18 % 12 = 6)
Step 3: gcd(12,6)  = gcd(6, 12 % 6 = 0)
结论:最大公约数 = 6

💻 C++ 代码示例

#include <iostream>
using namespace std;

// 函数:使用辗转相除法求最大公约数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = a % b; // 余数
        a = b;            // 更新a
        b = temp;         // 更新b
    }
    return a;
}

int main() {
    int x, y;
    cout << "请输入两个整数:";
    cin >> x >> y;
    int result = gcd(x, y);
    cout << "最大公约数是:" << result << endl;
    return 0;
}

🔍 扩展知识

  • 时间复杂度:O(log(min(a, b)))

  • 适用于大数求 GCD,如 10^9 以内的数字

  • 可扩展为“扩展欧几里得算法”求解 ax + by = gcd(a,b)


🧠 小口诀记忆

大除小得余数,反复算到余数无;
无余时得公约,大数小数分胜负。

🧪 作业练习题(附参考答案)

题目1: 求 gcd(60, 24) 的过程
题目2: 编写一个程序,读入多个整数对,输出每对的最大公约数
题目3: 思考为什么 gcd(a, 0) = a 是正确的?


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 辗转相除法(欧几里得算法)-野牛程序员教少儿编程
  • 相关推荐

    最新推荐

    热门点击