iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现求最大公约数的方法有哪些
  • 262
分享到

C语言实现求最大公约数的方法有哪些

2023-06-22 04:06:15 262人浏览 泡泡鱼
摘要

这篇文章主要介绍C语言实现求最大公约数的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述求任意两个正整数的最大公约数问题分析最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个

这篇文章主要介绍C语言实现求最大公约数的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

题目描述

求任意两个正整数的最大公约数

问题分析

最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。

——百度百科

最大公因数的求法有不少,本文我将采用穷举法、辗转相除法、更相减损法三种方法,求两个正整数的最大公约数(最大公因数)。

代码实现

方法一:穷举法

穷举法(列举法),是最简单最直观的一种方法。

具体步骤为:先求出两个数的最小值min(最大公约数一定小于等于两个数的最小值),接着从最小值min递减遍历(循环结束条件为i > 0),如果遇到一个数同时为这两个整数的因数,则使用break退出遍历(退出循环),这时的遍历值i即为两个正整数的最大公约数。

#include <stdio.h>int Get_Max_Comm_Divisor(int num1, int num2){    int i = 0;    //获取两个整数的最小值    int min = num1 < num2 ? num1 : num2;    //从两个数的最小值开始递减遍历    for(i = min; i > 0; i--)    {        //i为num1和num2的公倍数        if(num1 % i == 0 && num2 % i == 0)            break;    }    return i;}int main(){    int num1 = 0, num2 = 0;    puts("请输入两个正整数.");    scanf("%d%d", &num1, &num2);    printf("最大公约数为%d.\n", Get_Max_Comm_Divisor(num1, num2));    return 0;}

运行结果

C语言实现求最大公约数的方法有哪些

方法二:辗转相除法

辗转相除法又称欧几里得算法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式GCd(a,b) = gcd(b,a mod b)。

.欧几里得算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法。

扩展欧几里得算法可用于RSA加密等领域。

举例:

假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:

1997 / 615 = 3 (余 152)

615 / 152 = 4(余7)

152 / 7 = 21(余5)

7 / 5 = 1 (余2)

5 / 2 = 2 (余1)

2 / 1 = 2 (余0)

至此,最大公约数为1

以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

——百度百科

数学学渣的我觉得这个小算法特别神奇,但我并不想深入研究(为什么能用辗转相除求最大公因数呢),假如你想证明,可以自己试着简单地证明一下,我就直接选择强记了,嘿嘿。

虽然算法不好理解,但实现过程并不算难,按照辗转相除的概念,转换成代码即可。

具体步骤:先求出两个数num1和num2的余数remainder。然后将num2赋值给num1,让上次取余时的除数num2作为下次取余时的被除数。同时将当前的余数remainder作为下次取余的除数。这样一直地辗转相除,直到余数为0,这时的除数num2就是我们要求的最大公因数。

一开始两个数不需要区分大小,因为如果num1比num2小,那么取余的结果还是num1,这样下次取余就变成了num2 % num1,即大的值在左边,作为被除数)

#include <stdio.h>int Get_Max_Comm_Divisor(int num1, int num2){    int remainder = num1 % num2;  //余数    while(remainder != 0)    {        num1 = num2;      //更新被除数        num2 = remainder; //更新除数        remainder = num1 % num2; //更新余数    }    return num2;  //最后的除数即为最大公因数}int main(){    int num1 = 0, num2 = 0;    puts("请输入两个正整数.");    scanf("%d%d", &num1, &num2);    printf("最大公约数为%d.\n", Get_Max_Comm_Divisor(num1, num2));    return 0;}

运行结果

C语言实现求最大公约数的方法有哪些

方法三:更相减损法

《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,原文是:

可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

白话文译文:

(如果需要对分数进行约分,那么)可以折半的话,就折半(也就是用2来约分)。如果不可以折半的话,那么就比较分母和分子的大小,用大数减去小数,互相减来减去,一直到减数与差相等为止,用这个相等的数字来约分。

——百度百科

还有一种叫辗转相减的方法,好像和更相减损法相同,至少原理是一样的。

辗转相减法(求最大公约数),即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。例如 :两个自然数35和14,用大数减去小数,(35,14)->(21,14)->(7,14),此时,7小于14,要做一次交换,把14作为被减数,即(14,7)->(7,7),再做一次相减,结果为0,这样也就求出了最大公约数7。

——百度百科

刚才的辗转相除已经让我很吃惊了,没想到相减的方法。不过还是老规矩,直接用代码去实现这个方法,而不去证明。

不同于辗转相除法,更相减损法是需要考虑两个数的大小的,只能用大的数作为被减数,小的作为减数。

实现步骤:首先求出两个正整数num1和num2的差值diff,然后将num2赋值给num1,让上次相减时的减数num2作为下次相减时的被减数。同时将当前的差值diff作为下次相减的减数。这样一直地辗转相减,直到差值为0,这时的除数num2就是我们要求的最大公因数。

#include <stdio.h>int Get_Max_Comm_Divisor(int num1, int num2){    //两数相减的结果(取正值)    int diff = num1 > num2 ? num1 - num2 : num2 - num1;    while(diff != 0)    {        num1 = num2;   //更新被减数        num2 = diff; //更新减数        diff = num1 > num2 ? num1 - num2\               : num2 - num1; //更新两数相减的结果(取正值)    }    return num2;  //最后的减数即为最大公因数}int main(){    int num1 = 0, num2 = 0;    puts("请输入两个正整数.");    scanf("%d%d", &num1, &num2);    printf("最大公约数为%d.\n", Get_Max_Comm_Divisor(num1, num2));    return 0;}

运行结果

C语言实现求最大公约数的方法有哪些

以上是“C语言实现求最大公约数的方法有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网其他教程频道!

--结束END--

本文标题: C语言实现求最大公约数的方法有哪些

本文链接: https://www.lsjlt.com/news/302545.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现求最大公约数的方法有哪些
    这篇文章主要介绍C语言实现求最大公约数的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!题目描述求任意两个正整数的最大公约数问题分析最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个...
    99+
    2023-06-22
  • C语言求最大公约数的方法有哪些
    C语言求最大公约数的方法有以下几种:1. 辗转相除法:即用较大的数除以较小的数,然后用余数代替较大的数,再用较小的数除以余数,直到余...
    99+
    2023-08-12
    C语言
  • C语言实现求最大公约数的三种方法
    目录题目描述问题分析代码实现方法一:穷举法方法二:辗转相除法方法三:更相减损法题目描述 求任意两个正整数的最大公约数 问题分析 最大公因数,也称最大公约数、最大公因子,指两个或多个整...
    99+
    2024-04-02
  • C语言如何求最大公约数
    本篇内容介绍了“C语言如何求最大公约数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. C语言简介1.1 C语言发展史C语言是一种广泛使用...
    99+
    2023-06-29
  • c语言最大公约数怎么求
    使用欧几里得算法可以求出两个整数的最大公约数。该算法的原理是通过反复用被除数除以除数取余数的方式,直到余数为零,此时除数即为最大公约...
    99+
    2023-08-09
    c语言
  • 用C语言编程实现最大公约数求解
    标题:用C语言编程实现最大公约数求解 最大公约数(Greatest Common Divisor,简称GCD)是指能够同时整除两个或多个整数的最大正整数。求解最大公约数对于一些算法和问...
    99+
    2024-02-22
    c语言 最大公约数 求解 c语言编程
  • C语言中求最大公约数的算法探究
    C语言中求最大公约数的算法探究 引言:最大公约数(Greatest Common Divisor,简称GCD)是数学中常见的概念,指的是两个或更多个整数公有的最大约数。在计算机科学中,...
    99+
    2024-02-23
    算法 c语言 最大公约数
  • c语言求最小公倍数的方法有哪些
    在C语言中,求最小公倍数的方法有以下几种:1. 暴力法:从1开始逐个尝试两个数的倍数,直到找到它们的公倍数。```cint lcm(...
    99+
    2023-08-09
    c语言
  • c语言怎么求两个数的最大公约数
    可以使用辗转相除法来求两个数的最大公约数。算法如下:1. 将两个数中较大的数赋给变量a,较小的数赋给变量b。2. 计算a除以b的余数...
    99+
    2023-08-12
    c语言
  • 学习C语言如何求解最大公约数
    学习C语言如何求解最大公约数,需要具体代码示例 最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数中能够整除它们的最大正整数。在计算机编程中经常...
    99+
    2024-02-22
    c语言 最大公约数 求解
  • c语言如何求任意整数的最大公约数
    C语言中可以使用辗转相除法来求任意整数的最大公约数。具体步骤如下:1. 定义一个函数 `gcd`,接受两个整数参数 `a` 和 `b...
    99+
    2023-08-08
    c语言
  • C语言如何求两整数的最大公约数与最小公倍数
    目录题目思路代码法一法二(局部变量)法三(全局变量)运行结果题目 用一函数求最大公约数,用另一函数调用此函数求出最大公约数,并用求出的最大公约数求最小公倍数。 具体要求如下: &nb...
    99+
    2022-11-13
    C语言整数 整数最大公约数 整数最小公倍数
  • C语言怎么求两个正整数的最大公约数
    这篇文章主要介绍“C语言怎么求两个正整数的最大公约数”,在日常操作中,相信很多人在C语言怎么求两个正整数的最大公约数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么求两个正整数的最大公约数”的疑惑有所...
    99+
    2023-06-25
  • C语言最大公约数的示例分析
    今天就跟大家聊聊有关C语言最大公约数的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。穷举法(1) i= a ,b中较小的数(2)若a,b能同时被i整除,则i即为最大...
    99+
    2023-06-21
  • C语言最大公约数示例教程
    目录穷举法 辗转相除法 辗转相减法穷举法 (1) i= a ,b中较小的数 (2)若a,b能同时被i整除,则i即为最大公约数,结束 (3)若不能,则 i--,再回去执行(2) #...
    99+
    2024-04-02
  • Python实现求解最大公约数的五种方法总结
    目录方法一:短除法方法二:欧几里得算法(辗转相除法)方法三:更相减损术方法四:穷举法(枚举法)方法五:Stein算法求最大公约数是习题中比较常见的类型,下面小编会给大家提供五种比较常...
    99+
    2024-04-02
  • C语言求两个正整数的最大公约数示例代码
    目录前言1.穷举法2.欧几里得算法(辗转相除法)3.递归方法附:相减法总结前言 两个正整数的最大公约数(Greatest Common Divisor, GCD)是能够整除这两个整数...
    99+
    2024-04-02
  • java求最大公约数与最小公倍数的方法示例
    本文实例讲述了java求最大公约数与最小公倍数的方法。分享给大家供大家参考,具体如下:Gongyueshu.java文件:package math;public class Gongyueshu{ public static void m...
    99+
    2023-05-30
    java 公约数 公倍数
  • python辗转相除法求最大公约数和最小公倍数的实现
    目录辗转相除法求最大公约数和最小公倍数辗转相除法数学原理python代码实现用递归的方式实现Python3 20.辗转相除法算法分析源代码结果截图辗转相除法求最大公约数和最小公倍数 ...
    99+
    2024-04-02
  • Python求最大公约数的五种常见方法
    求最大公约数是习题中比较常见的类型,下面小编会给大家提供五种比较常见的算法,记得帮忙点个赞哦! 一般来说,最大公约数的求法大概有5种 方法一:短除法         短除法是求最大公因数的一种方法,也可用来求最小公倍数。求几个数最大公因数的...
    99+
    2023-10-03
    python pycharm
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作