我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言怎么求两个正整数的最大公约数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言怎么求两个正整数的最大公约数

这篇文章主要介绍“C语言怎么求两个正整数的最大公约数”,在日常操作中,相信很多人在C语言怎么求两个正整数的最大公约数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么求两个正整数的最大公约数”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

两个正整数的最大公约数(Greatest Common Divisor, GCD)是能够整除这两个整数的最大整数。两个正整数的最大公约数的求法有多种解答,本文就三种方法做详细介绍:穷举法、欧几里得算法(辗转相除法)、递归方法。

我们从一道问题来引入:编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的最大公约数。

1.穷举法

根据最大公约数的定义,我们可以采用一种最简单的方法——穷举法来编写代码。由于a和b的最大公约数不可能比a和b中的较小者还大,否则一定不能整除它,因此,先找到a和b中的较小者t,然后从t开始逐次减1尝试每种可能,即检验t到1之间的所有整数,第一个满足公约数条件的t,就是a和b的最大公约数。据此我们可编写函数Gcd()如下:

//函数功能:计算a和b的最大公约数,输入负数时返回-1int Gcd(int a, int b){    int i, t;    if (a <=0 || b <= 0)        return -1;    t = a < b ? a : b;    for (i=t; i>0; i--)    {        if (a%i==0 && b%i==0)            return i;    }    return 1;}

这种方法简单暴力,思维量小,但效率较低,且当两个正整数都较大,且最大公约数为1时,循环的次数为较小数的值,可想而知所需时间会很长。

2.欧几里得算法(辗转相除法)

下面介绍一种求最大公约数较常用的办法:欧几里得算法(辗转相除法)。

忽略数学原理,我们有如下算法:对正整数a和b,连续进行求余运算,直到余数为0为止,此时非0的除数就是最大公约数。设 r=a mod b 表示a除以b的余数,若 r≠0 ,则将b作为新的a,r作为新的b,重复 a mod b 运算,直到 r=0 为止,此时b为所求的最大公约数。例如,50和15的最大公约数的求解过程可表示为:Gcd(50, 15)=Gcd(15, 5)=Gcd(5, 0)=5。

用这种算法可编写函数Gcd()如下:

//函数功能:计算a和b的最大公约数,输入负数时返回-1int Gcd(int a, int b){    int r;    if (a <= 0 || b <= 0)        return -1;    do{        r = a % b;        a = b;        b = r;    } while (r != 0);    return a;}

我们也可以考虑使用递归实现如下:

//函数功能:计算a和b的最大公约数,输入负数时返回-1int Gcd(int a, int b){    if (a <= 0 || b <= 0)        return -1;    if (a % b == 0)        return b;    else        return Gcd(b, a % b);}

3.递归方法

对于最大公约数,还有3条性质:

性质1 如果 a>b,则a和b与a-b和b的最大公约数相同;

性质2 如果 b>a,则a和b与a和b-a的最大公约数相同;

性质3 如果 a=b,则a和b的最大公约数与a值和b值相同。

对正整数a和b,当 a>b 时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数,对a-b和b计算公约数就相当于对a和b计算公约数。反复使用最大公约数的3条性质,直到a和b相等为止,这时,a或b就是它们的最大公约数。

这就是所谓的第三种方法:递归方法。虽然此法被称为递归方法,但只是思想方法运用了递归的方法,并不代表只能使用递归实现。我们同样可以通过非递归和递归两种手段编写函数Gcd()。非递归实现如下:

//函数功能:计算a和b的最大公约数,输入负数时返回-1int Gcd(int a, int b){    if (a <= 0 || b <= 0)        return -1;    while (a != b)    {        if (a > b)            a = a - b;        else if (b > a)            b = b - a;    }    return a;}

编写递归函数如下:

//函数功能:计算a和b的最大公约数,输入负数时返回-1int Gcd(int a, int b){    if (a <= 0 || b <= 0)        return -1;    if (a == b)        return a;    else if (a > b)        return Gcd(a-b, b);    else        return Gcd(a, b-a);}

以上就是三种计算最大公约数的算法,可使用如下主函数来调用函数Gcd(),计算最大公约数:

#include <stdio.h>int Gcd(int a, int b);int main(void){    int a, b, c;    printf("Input a,b:");    scanf("%d,%d", &a, &b);    c = Gcd(a,b);    if (c != -1)        printf("Greatest Common Divisor of %d and %d is %d\n", a, b, c);    else        printf("Input number should be positive!\n");    return 0;}

求两个正整数的最大公约数的过程,实质上是使用最大公约数的定义及性质求解的过程,对此感兴趣的伙伴们可以自己研究相关数学原理与证明。

附:相减法

这种方法比较易于理解,原理是先判断两个正整数大小,并将较大数与较小数的差值赋给较大数,循环此步骤直到两数相等,此时得出最大公约数。

代码如下:

#include<stdio.h>int main(){int m,n;printf("请输入两个正整数:");scanf("%d %d",&m,&n);printf("%d%和%d的最大公约数是",m,n);    while(m!=n){if(m>n){m=m-n;}else{n=n-m;}}printf("%d",n);return 0;}

到此,关于“C语言怎么求两个正整数的最大公约数”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言怎么求两个正整数的最大公约数

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

下载Word文档

猜你喜欢

C语言怎么求两个正整数的最大公约数

这篇文章主要介绍“C语言怎么求两个正整数的最大公约数”,在日常操作中,相信很多人在C语言怎么求两个正整数的最大公约数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么求两个正整数的最大公约数”的疑惑有所
2023-06-25

c语言怎么计算两个正整数的最大公约数

#include // 计算两个正整数的最大公约数int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int main
c语言怎么计算两个正整数的最大公约数
2024-03-04

c语言怎么求两个数的最大公约数

可以使用辗转相除法来求两个数的最大公约数。算法如下:1. 将两个数中较大的数赋给变量a,较小的数赋给变量b。2. 计算a除以b的余数,将余数赋给变量r。3. 若r等于0,则b即为最大公约数,算法结束。4. 若r不等于0,则将b赋给a,将r赋
2023-08-12

C语言如何求两整数的最大公约数与最小公倍数

这篇文章主要介绍了C语言中如何求两整数的最大公约数与最小公倍数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

c语言最大公约数怎么求

使用欧几里得算法可以求出两个整数的最大公约数。该算法的原理是通过反复用被除数除以除数取余数的方式,直到余数为零,此时除数即为最大公约数。以下是使用C语言实现求最大公约数的代码示例:```c#include int gcd(int a, in
2023-08-09

c语言怎么求两个整数的最大值

可以使用条件判断语句来求两个整数的最大值,具体代码如下:```c#include int main() {int num1, num2, max;printf("请输入两个整数:\n");scanf("%d%d", &num1, &num2
2023-10-10

c语言如何求任意整数的最大公约数

C语言中可以使用辗转相除法来求任意整数的最大公约数。具体步骤如下:1. 定义一个函数 `gcd`,接受两个整数参数 `a` 和 `b`,表示待求最大公约数的两个整数。2. 在函数中使用循环来进行辗转相除的计算,直到 `b` 变成 0,此时
2023-08-08

C语言如何求最大公约数

本篇内容介绍了“C语言如何求最大公约数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. C语言简介1.1 C语言发展史C语言是一种广泛使用
2023-06-29

C语言怎么求两个数的最小公倍数

要求两个数的最小公倍数,可以通过求两个数的最大公约数来实现。首先,我们可以使用辗转相除法求两个数的最大公约数,即用较大的数除以较小的数,然后用余数来除较小的数,继续进行这个过程,直到余数为0,而除数就是两个数的最大公约数。接下来,可以利用最
2023-08-08

如何用C++求两个数的最大公约数和最小公倍数

最大公约数是指两个或多个整数共有约数中,最大的一个约数,常用的方法是欧几里得算法,也叫辗转相除法,下面这篇文章主要给大家介绍了关于如何用C++求两个数的最大公约数和最小公倍数的相关资料,需要的朋友可以参考下
2023-01-05

c++怎么求最大公约数

C++中求最大公约数可以使用欧几里得算法(辗转相除法)。以下是使用递归方式实现最大公约数的示例代码:```cpp#include int gcd(int a, int b) {if (b == 0) {return a;}return gc
2023-09-28

学习C语言如何求解最大公约数

学习C语言如何求解最大公约数,需要具体代码示例最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数中能够整除它们的最大正整数。在计算机编程中经常会用到最大公约数,特别是在处理分数、化简分数以及求解最简
学习C语言如何求解最大公约数
2024-02-22

C语言中求最大公约数的算法探究

C语言中求最大公约数的算法探究引言:最大公约数(Greatest Common Divisor,简称GCD)是数学中常见的概念,指的是两个或更多个整数公有的最大约数。在计算机科学中,求最大公约数是一种常见的需求。本文将探究C语言中求最大公
C语言中求最大公约数的算法探究
2024-02-23

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

C语言求最大公约数的方法有以下几种:1. 辗转相除法:即用较大的数除以较小的数,然后用余数代替较大的数,再用较小的数除以余数,直到余数为0为止,此时较小的数即为最大公约数。```cint gcd(int a, int b) {if (b =
2023-08-12

用C语言编程实现最大公约数求解

标题:用C语言编程实现最大公约数求解最大公约数(Greatest Common Divisor,简称GCD)是指能够同时整除两个或多个整数的最大正整数。求解最大公约数对于一些算法和问题解决非常有帮助。在本文中,将通过C语言编程来实现求解最
用C语言编程实现最大公约数求解
2024-02-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录