当前位置: 首页 > news >正文

蓝桥杯C++基础算法-最大公约数

这段代码的功能是计算两个整数的最大公约数(GCD),并处理多次查询。它使用了欧几里得算法来高效地计算最大公约数。以下是代码的详细思路解析:


1. 问题背景

给定一组整数对,目标是计算每对整数的最大公约数(GCD)。最大公约数是指能够同时整除两个整数的最大正整数。

2. 欧几里得算法的概念

欧几里得算法是一种高效的算法,用于计算两个整数的最大公约数。其核心思想是利用递归关系: gcd(a,b)=gcd(b,a%b) 当 b=0 时,最大公约数为 a。

3. 代码逻辑解析

(1) GCD 函数
int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}
  • 输入:两个整数 ab

  • 输出:这两个整数的最大公约数。

  • 逻辑

    • 如果 b 不为 0,递归调用 gcd(b, a % b)

    • 如果 b 为 0,返回 a,因为此时 a 就是最大公约数。

(2) 主函数
int main()
{
    int n; cin >> n;  // 输入查询次数
    while (n--)
    {
        int a, b;
        cin >> a >> b;  // 输入两个整数
        cout << gcd(a, b) << endl;  // 输出它们的最大公约数
    }
    return 0;
}
  • 输入:查询次数 n,然后是 n 对整数。

  • 逻辑

    • 使用一个循环处理每个查询。

    • 对于每对整数 ab,调用 gcd 函数计算它们的最大公约数。

    • 输出结果。


4. 示例运行

输入:
3
12 18
25 15
7 13
运行过程:
  1. 输入查询次数 n = 3

  2. 输入3对整数:

    • 第1对:1218

    • 第2对:2515

    • 第3对:713

  3. 计算每对整数的最大公约数:

    • gcd(12, 18)

      • gcd(18, 12 % 18) = gcd(18, 12)

      • gcd(12, 18 % 12) = gcd(12, 6)

      • gcd(6, 12 % 6) = gcd(6, 0),返回 6

    • gcd(25, 15)

      • gcd(15, 25 % 15) = gcd(15, 10)

      • gcd(10, 15 % 10) = gcd(10, 5)

      • gcd(5, 10 % 5) = gcd(5, 0),返回 5

    • gcd(7, 13)

      • gcd(13, 7 % 13) = gcd(13, 7)

      • gcd(7, 13 % 7) = gcd(7, 6)

      • gcd(6, 7 % 6) = gcd(6, 1)

      • gcd(1, 6 % 1) = gcd(1, 0),返回 1

  4. 输出结果:

    6
    5
    1
输出:
6
5
1

5. 总结

这段代码的核心思路是通过欧几里得算法高效地计算两个整数的最大公约数。欧几里得算法的时间复杂度为 O(logmin(a,b)),非常高效。代码通过一个循环处理多次查询,每次调用 gcd 函数计算结果并输出。

完整代码

// 包含标准库中的所有头文件,方便使用标准库的各种功能
#include<bits/stdc++.h>
// 使用标准命名空间,这样在使用标准库的标识符时无需加 std:: 前缀
using namespace std;

// 定义一个函数 gcd 用于计算两个整数 a 和 b 的最大公约数
// 采用欧几里得算法(辗转相除法)
int gcd(int a, int b)
{
    // 如果 b 不为 0,递归调用 gcd 函数,计算 b 和 a % b 的最大公约数
    // 如果 b 为 0,说明此时 a 就是最大公约数,返回 a
    return b ? gcd(b, a % b) : a;
} 

// 主函数,程序的入口点
int main()
{
    // 定义一个整数 n,用于存储接下来要输入的组数
    int n;
    // 从标准输入读取一个整数并赋值给 n
    cin >> n;
    // 循环 n 次,每次循环结束后 n 的值减 1
    while(n --)
    {
        // 定义两个整数 a 和 b,用于存储每组输入的两个数
        int a, b;
        // 从标准输入读取两个整数并分别赋值给 a 和 b
        cin >> a >> b;
        // 调用 gcd 函数计算 a 和 b 的最大公约数,并将结果输出到标准输出
        // 输出结果后换行
        cout << gcd(a, b) << endl;
    }
    // 程序正常结束,返回 0
    return 0;
}

http://www.dtcms.com/a/106543.html

相关文章:

  • 论文阅读:基于增强通用深度图像水印的混合篡改定位技术 OmniGuard
  • 电池自动点焊机:智能制造的得力助手|深圳比斯特自动化
  • 普通链式二叉树(习题版)
  • 脑影像分析软件推荐| SimTB
  • WireShark安装
  • BigMusic来了:火山引擎AI音乐模型的技术革新与应用实践
  • MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
  • Doris:打破 SQL 方言壁垒,构建统一数据查询生态
  • TensorFlow 字符串操作
  • Uubuntu20.04复现SA-ConvONet步骤
  • 【2025】物联网发展趋势介绍
  • 制造业数字化转型:智能招聘系统破解蓝领用工匹配难题?
  • MySQL学习笔记集--简单介绍以及下载途径
  • EdgeOne Pages 上线「DeepSeek R1 模板」,1分钟快速部署对话型 AI 类网站
  • MySQL表的增删改查(进阶)
  • 应华为 AI 医疗军团之战,各方动态和反应
  • 【C#】.net core 6.0 依赖注入常见问题之一,在构造函数使用的类,都需要注入到容器里,否则会提示如下报错,让DeepSeek找找原因,看看效果
  • 绿盟1面-流量篇
  • GitHub与Gitee各是什么?它们的区别与联系是什么?
  • DeepSeek-R1 API:多场景赋能的智能语言模型
  • 1.4 基于模拟退火改进蛇算法优化VGG13SE网络超参数的故障诊断模型
  • 程序化广告行业(52/89):程序化创意深度剖析
  • Python自定义消费Kafka至HDFS
  • 记录学习的第十九天
  • JAVA学习小计之IO流02--字符流篇
  • TypeScript装饰器与元编程
  • 美军用通信技术调研
  • C++ 新特性 | C++ 11 | std::move
  • maven如何使用
  • 《UNIX网络编程卷1:套接字联网API》第4章 基本TCP套接字编程