C语言实现求最大公约数的三种方法

C语言实现求最大公约数的三种方法

最大公约数是指两个或多个整数共有约数中的最大值。下面我们将介绍 C 语言实现求最大公约数的三种方法。

1.辗转相减法

辗转相减法的基本思想是用大数减去小数,然后再用得出的差值去减小的数,这样一直操作,直到所减两数相等。 代码如下:

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

辗转相减法是一种很容易理解的方法,但是在 x 和 y 的数值非常大的时候,效率会比较低。

2. 乘除法

用较大数去除以较小数,再用除数去除余数,再用上一步的余数去除下一步的除数,如此反复直到余数为0为止,则最后的除数就是最大公约数。

代码如下:

int gcd(int x,int y) {
    int temp;
    while(x % y != 0) {
        temp = x % y;
        x = y;
        y = temp;
    }
    return y;
}

如果两个数中一个数很大,而另外一个数很小,那么这种方法比起上一种方法更加高效。

3. 更相减损术和移位相结合的方法

更相减损术和移位相结合的方法结合了辗转相减法和乘除法的优点。在每一轮循环中,我们需要将 x 和 y 分别进行移位操作,移位操作一共分为两种情况:

  1. 当 x 和 y 均为偶数时,将 x 和 y 同时右移直到它们变成奇数时停止,此时,我们将 t 记为移动的次数。

  2. 当 x 为奇数而 y 为偶数时,只对 y 进行右移操作,直到 y 为奇数时停止,此时我们重新回到第一种情况。

确定了移位次数 t 后,每次将 x 和 y 的绝对值进行减少,共减少 t 次。代码如下:

int gcd(int x,int y) {
    int factor = 1;
    while(x != 0 && y != 0) {
        if(x % 2 == 0 && y % 2 == 0) {
            x /= 2;
            y /= 2;
            factor *= 2;
        } else if(x % 2 == 0 && y % 2 == 1) {
            x /= 2;
        } else if(x % 2 == 1 && y % 2 == 0) {
            y /= 2;
        } else {
            if(x > y) {
                x -= y;
            } else {
                y -= x;
            }
        }
    }
    return x * factor;
}

这种方法可以在 x 和 y 均为大整数时,还能够得到较好的效果。我们来看个示例:

例如,对于 $x = 24$ 和 $y = 18$,我们来看一下三种方法的结果。

  • 用辗转相减法求得最大公约数为6
  • 用乘除法求得最大公约数为6
  • 用更相减损术和移位相结合的方法求得最大公约数为6

因此,这三种方法都可以有效地求出两个数的最大公约数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现求最大公约数的三种方法 - Python技术站

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

相关文章

  • 微信小程序picker多列选择器(mode = multiSelector)

    下面是关于“微信小程序picker多列选择器(mode = multiSelector)”的详细讲解: 什么是微信小程序picker多列选择器? 微信小程序picker多列选择器即为可以在小程序中实现多列选择的组件,通过该组件可以让用户从多个选项中选择出合适的内容。在小程序中使用它能够增强用户体验,使得用户选择更加方便快捷。 使用多列选择器的步骤 该组件的使…

    C 2023年5月23日
    00
  • C++实现地铁自动售票系统程序设计

    C++实现地铁自动售票系统程序设计攻略 概述 地铁自动售票系统是一种基于计算机技术的智能化自助售票系统,可以方便快捷地为乘客提供地铁车票的购买、充值、查询、退款等服务。本文主要介绍如何使用C++语言实现地铁自动售票系统的设计以及开发方法。 实现步骤 第一步:确定功能需求 地铁自动售票系统的主要功能包括: 售卖地铁票和充值。要求用户输入选择的地铁线路和数量,然…

    C 2023年5月23日
    00
  • C++实现加减乘除计算器

    C++实现加减乘除计算器 本文将展示如何使用C++实现加减乘除计算器。 示例代码 #include <iostream> using namespace std; int main() { char op; double a, b; cout << "请输入两个数字: "; cin >> a >&…

    C 2023年5月24日
    00
  • 使用VScode搭建ROS开发环境的教程详解

    使用VScode搭建ROS开发环境的教程详解 为了在 VScode 中开发 ROS 项目,我们需要以下常用插件: C/C++ 扩展插件 ROS 扩展插件 ROS msg 扩展插件 下面是一个详细的步骤列表,介绍如何准备环境、配置 VScode 以及开发在 ROS 中。 环境准备 为了完成本教程,你需要:1. 一台安装有 Ubuntu 的电脑。2. 你需要在电…

    C 2023年5月23日
    00
  • C语言:利用指针编写程序,用梯形法计算给定的定积分实例

    利用指针编写程序,用梯形法计算给定的定积分 一、梯形法简介 梯形法是一种基本的数值积分方法,它的思想是将要求解的定积分区间等分成若干小区间,每个小区间内的函数曲线视为一条直线段,进而将小区间视为一个梯形,因此得名梯形法。 二、程序设计思路 用户输入被积函数的表达式及积分区间端点,步长,以及误差限制等参数; 计算区间内小梯形的面积; 根据误差限制和小梯形的总面…

    C 2023年5月23日
    00
  • C语言实现小学生考试系统

    C语言实现小学生考试系统的攻略 系统的主要功能 该考试系统主要有以下功能:- 可以生成随机的小学生数学题目- 可以让学生输入答案,自动判断正误并给出分数和评价- 可以记录学生的成绩和评价,并输出成绩单 实现过程 首先,我们需要定义题目类型和答案类型。在本系统中,我们选择了整数类型的加法、减法和乘法,代表三种不同类型的数学题。 “`C typedef str…

    C 2023年5月22日
    00
  • 如何理解C++指针常量和常量指针

    下面给你详细讲解如何理解C++指针常量和常量指针。 1. 指针常量 1.1 概念介绍 指针常量是指一个指针被定义为常量(值不能被改变),而指针所指向的变量的值可以变化。在定义指针常量时,必须把指针初始化为某个地址。 1.2 示例说明 以下是一个指针常量的示例: #include <iostream> using namespace std; in…

    C 2023年5月23日
    00
  • C语言的可变参数函数实现详解

    C语言的可变参数函数实现详解 1. 可变参数函数概述 可变参数函数是指可以接收任意数量参数的函数,参数数量及类型可以在调用时动态确定。在C语言中,可变参数函数通过stdargs.h头文件提供的宏来实现。而在C++中,则通过stdarg.h头文件中的相应函数和类型来实现。 2. 可变参数函数声明 可变参数函数在定义时,需要使用省略号(…)来表示可变参数的部…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部