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

洛谷 B4025:最大公约数 ← 辗转相除法+更相减损法

【题目来源】
https://www.luogu.com.cn/problem/B4025

【题目描述】
定义两个正整数的最大公约数 gcd(a,b) 为最大的正整数 d,使得 d 可以同时整除 a 和 b。
例如,gcd(9,12)=3,因为 9÷3 和 12÷3 的余数是 0,而无法找到一个比 3 更大的正整数满足要求。
现在给定两个正整数 a,b,要求出 gcd(a,b)。

【输入格式】
输入两个正整数 a,b。

【输出格式】
输出 gcd(a,b)。

【输入样例】
9 12

【输出样例】
3

【说明/提示】
对于 40% 的数据,1≤a,b≤1000。
对于所有的数据,1≤a,b≤
10^9

【算法分析】
●​​​​​​​ 辗转相除法
辗转相除法,又称欧几里德算法,是求两个正整数之最大公约数的算法‌。它是已知最古老的算法之一,可追溯至公元前 300 年,首次出现于欧几里德的《几何原本》中。该算法基于以下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数,即 gcd(a,b) = gcd(b,a mod b),其中 gcd 表示最大公约数,mod 表示取余操作‌。

● 更相减损法
更相减损法是一种求两个正整数最大公约数的算法,它出自中国古代数学著作《九章算术》。更相减损法的基本原理是通过反复用较大的数减去较小的数,直到两数相等为止,此时的数即为两数的最大公约数。更相减损法原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。​​​​​​​


●‌ 在 C++ 中,int 类型通常能表示的数值范围是从 -2,147,483,648 到 2,147,483,647‌,也即 -2^31 ~ 2^31-1,小于 2.15×10^9。若大于 2.15×10^9,需用 long long 型

【算法代码一:辗转相除法】

#include <bits/stdc++.h>
using namespace std;

int gcd(int a,int b) {
    if(b==0) return a;
    else return gcd(b,a%b);
}

int main() {
    int a,b;
    cin>>a>>b;
    cout<<gcd(a,b)<<endl;

    return 0;
}


/*
in:
9 12

out:
3
*/

【算法代码二:更相减损法】

#include <bits/stdc++.h>
using namespace std;

int gcd(int a,int b) {
    while(a!=b) {
        if(a>b) a-=b;
        else b-=a;
    }
    return a;
}

int main() {
    int a,b;
    cin>>a>>b;
    cout<<gcd(a,b)<<endl;

    return 0;
}


/*
in:
9 12

out:
3
*/

【算法代码:利用 algorithm 包中自带的函数 __gcd()

#include <bits/stdc++.h>
using namespace std;

int main() {
    int a,b;
    cin>>a>>b;
    cout<<__gcd(a,b)<<endl;

    return 0;
}


/*
in:
9 12

out:
3
*/



【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/136272280

 

相关文章:

  • YOLO11环境搭建CUDA12.6
  • Python入门全攻略(六)
  • AMBA-CHI协议详解(十四)
  • istio入门篇(一)
  • 文心智能体平台将全面接入DeepSeek
  • QT基础一、学会建一个项目
  • 零基础购买阿里云服务器,XShell连接云服务器
  • 五、敏捷方法论:敏捷团队与文化
  • MySQL视图
  • DeepSeek与医院电子病历的深度融合路径:本地化和上云差异化分析
  • 2024年年终总结
  • Linux 目录结构与基础命令学习记录
  • 时序约束进阶八:时钟抖动Jitter与不确定性Uncertainty
  • 日常工作管理软件比较:6款工具的优缺点深度分析
  • BY组态:工业自动化的未来,触手可及
  • ROS2下编写orbbec相机C++ package并Rviz显示
  • Django后台新建管理员
  • Typescript class中的方法和函数类型的属性有何不同?
  • 当时只道是寻常
  • Postfix 主配置文件:只允许本机发送邮件,不接收任何外部邮件
  • 广东高端网站建设/深圳百度关键
  • 关于基层政府网站建设的研究/湖南seo优化推荐
  • 昆明高端网站建设/seo优化快速排名技术
  • 网站建设空间是指什么软件/竞价网站
  • wordpress侧栏导航/青岛网站关键词排名优化
  • 电商平台数据库设计/关键词优化推广公司排名