C++求最大公约数四种方法解析

C++求最大公约数四种方法解析

在C++编程中,求最大公约数是一个基础而重要的问题。此处我们将介绍四种常见的求最大公约数的方法,包括暴力枚举法、更相减损法、辗转相除法、以及辗转相减法。

1. 暴力枚举法

暴力枚举法是一种最基础的求最大公约数的方法,其思路基于枚举法。具体来说,我们可以简单地从较小数开始逆序枚举每一个可能的公约数,直到找到两个整数均能整除的最大正整数。

下面是通过暴力枚举法求两个整数的最大公约数的C++程序:

#include <iostream>
using namespace std;

int gcd(int a, int b){
    int res = 1;
    for(int i = min(a, b); i >=1; i--){
        if(a % i == 0 && b % i == 0){
            res = i;
            break;
        }
    }
    return res;
}

int main() {
    int a, b;
    cin >> a >> b;
    cout << "The gcd of " << a << " and " << b << " is " << gcd(a, b) << endl;
    return 0;
}

我们输入两个正整数a和b,程序便会输出这两个正整数的最大公约数。

当然,暴力枚举法的时间复杂度比较高,而且枚举实际上只需要枚举到a和b中较小的数即可。因此,在接下来的方法中,我们会介绍更为高效的求最大公约数的方法。

2. 更相减损法

更相减损法是一种基于减法的方法,其思路基于两个整数a和b的差,并不断通过相减的方式将它们变为一个公因数与一个较小的数之间的差,直至两个数相等。具体来说,更相减损法可以写作:

int gcd(int a, int b){
    if(a == b) return a;
    if(a < b) swap(a, b);
    return gcd(a-b, b);
}

上述代码中,若a等于b,则返回a,若a小于b,则将a和b交换,然后将它们的差a-b与较小的数b作为新的a和b继续递归。当a等于b时,便找到了两个整数的最大公约数。

下面是更相减损法求两个整数的最大公约数的示例:

#include <iostream>
using namespace std;

int gcd(int a, int b){
    if(a == b) return a;
    if(a < b) swap(a, b);
    return gcd(a-b, b);
}

int main() {
    int a, b;
    cin >> a >> b;
    cout << "The gcd of " << a << " and " << b << " is " << gcd(a, b) << endl;
    return 0;
}

3. 辗转相除法

辗转相除法也称为欧几里得算法,是一种基于除法的方法。其基本思路是,将两个整数a和b中较大的数除以较小的数得到一个余数c,然后将原来的较小的数b和余数c作为新的一对数,不断递归直至余数为0。此时,较小的数就是这两个数的最大公约数。

下面是辗转相除法求两个整数的最大公约数的示例:

#include <iostream>
using namespace std;

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

int main() {
    int a, b;
    cin >> a >> b;
    cout << "The gcd of " << a << " and " << b << " is " << gcd(a, b) << endl;
    return 0;
}

4. 辗转相减法

辗转相减法与辗转相除法类似,其基本思路也是将两个整数不断相减的过程中取余数并递归,直至余数为0得到最大公约数。具体来说,辗转相减法可以写作:

int gcd(int a, int b){
    if(a == b) return a;
    if(a < b) swap(a, b);
    return gcd(a-b, b);
}

下面是辗转相减法求两个整数的最大公约数的示例:

#include <iostream>
using namespace std;

int gcd(int a, int b){
    if(a == b) return a;
    if(a < b) swap(a, b);
    return gcd(a-b, b);
}

int main() {
    int a, b;
    cin >> a >> b;
    cout << "The gcd of " << a << " and " << b << " is " << gcd(a, b) << endl;
    return 0;
}

通过比较发现,辗转相减法与更相减损法实际上是一样的,只是在处理减法的方式上有所不同。

以上四种方法均可以求得两个整数的最大公约数,其中辗转相除法是最为高效和常用的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++求最大公约数四种方法解析 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Linux系统安装docker并用ssh登录docker容器的操作方法

    下面是Linux系统安装docker并用ssh登录docker容器的操作方法的攻略,包含以下步骤及示例说明: 安装 Docker 1.首先,需要确认是否已经安装了 Docker,可以使用以下命令检查: docker version 如果已经安装了 Docker 会输出相应的版本信息,否则会提示未找到命令。 使用以下命令安装最新版本的 Docker: sudo…

    人工智能概览 2023年5月25日
    00
  • 在Python的Django框架中调用方法和处理无效变量

    在Python的Django框架中,我们经常需要调用方法和处理无效变量。以下是一些步骤和示例,以帮助你更好地完成这些任务。 调用方法 在Django框架中,调用方法是非常常见的。以下是一些步骤,以帮助你更好地理解如何调用方法。 步骤1:定义你的方法 首先,需要在Django中定义一个可调用的方法。例如,在models.py文件中,可以定义一个方法来更新一个人…

    人工智能概览 2023年5月25日
    00
  • express+vue+mongodb+session 实现注册登录功能

    下面是详细讲解“express+vue+mongodb+session 实现注册登录功能”的完整攻略: 准备工作 首先,我们需要在本地安装Node.js和MongoDB,然后新建一个名为“project”的文件夹,用于存放我们的代码。接下来,进入“project”文件夹,并在命令行中执行以下命令来初始化我们的项目: npm init -y 安装依赖包 我们需…

    人工智能概论 2023年5月25日
    00
  • 详解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0

    详解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0的完整攻略 本文章将详细讲解如何在VS2019中安装配置OpenCV-4-1-0以及OpenCV-contrib-4-1-0库,以及如何使用这两个库。 安装配置OpenCV-4-1-0和OpenCV-contrib-4-1-0 下载OpenCV-4-1-0和OpenCV-co…

    人工智能概览 2023年5月25日
    00
  • Django框架使用mysql视图操作示例

    下面是“Django框架使用mysql视图操作示例”的完整攻略。 什么是Django框架 Django是一个开放源代码的Web应用程序框架。使用Python编写,遵循MVC模式。Django的主要目标是使得开发复杂、数据库驱动的网站变得简单。Django注重快速开发、DRY原则、模块化设计。它使用鲁棒性、可重用性和可组合性开发高级功能和复杂性。 Django…

    人工智能概论 2023年5月25日
    00
  • Ubuntu20.04 VNC 安装与设置实现

    下面是 Ubuntu20.04 VNC 安装与设置实现的完整攻略步骤: 1. 安装 VNC 服务 打开终端,输入以下命令进行 VNC 服务的安装: sudo apt-get update sudo apt-get install -y tightvncserver 2. 设置 VNC 密码 输入以下命令启动 tightvncserver 并设置密码: vnc…

    人工智能概览 2023年5月25日
    00
  • javascript实现简单留言板案例

    下面是“javascript实现简单留言板案例”的完整攻略。 留言板的基本实现 接收用户输入的留言内容: <form> <textarea id="message"></textarea> <button id="submit">提交留言</button> &…

    人工智能概论 2023年5月25日
    00
  • Python ckeditor富文本编辑器代码实例解析

    Python ckeditor富文本编辑器代码实例解析 什么是ckeditor富文本编辑器? ckeditor是一款基于Javascript的富文本编辑器,支持多语言,可自定义配置,广泛用于web应用中的文章编辑、内容编辑等场景。 如何在Python中使用ckeditor? 使用Python中的Django框架,我们可以轻松地引入ckeditor并在网站中使…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部