求最大公约数的4种方法C语言(辗转相除法、辗转相减法、穷举法、递归法)

article/2025/10/13 10:29:15

最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。

目录

问题描述

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

代码实现 

辗转相减法

代码实现

暴力穷举法

代码实现

递归法

代码实现

测试及结果

问题描述

随机输入两个数,求其最大公约数

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

辗转相除法依赖于一个定理:

两个整数的最大公约数等于其中较小的那个数和两数取模的最大公约数。

即:gcd (x , y) = gcd (y , x % y ) ,其中 x > y。

代码实现 

#include <stdio.h>
int main()
{int x,y;scanf("%d%d", &x, &y);while (1){if (x < y)//比较大小,让小的数放在后面{int tmp = x;x = y;y = tmp;}if (x % y == 0)//若余数为 0 则 y 为两数的最大公约数;{printf("最大公约数的 %d\n", y);break;}else//若余数不为 0,则令 x = y,y = 余数,重复循环{int tmp = x % y;x = y;y = tmp;}}return 0;
}

辗转相减法

其原理其实与辗转相除法一样,只是辗转相除法将的是相除取余,而更相减损法讲的是相减取差。

gcd (x , y) = gcd (y , x % y ) ,其中 x > y

代码实现

#include <stdio.h>
int main()
{int x, y;scanf("%d%d", &x, &y);while (1){if (x < y)//比较大小,让小的数放在后面{int tmp = x;x = y;y = tmp;}if (x - y == 0)//若差为 0,则两数相等,它本身就是最大公约数;{printf("最大公约数的 %d\n", y);break;}else//若差不为 0,则令 x = y,y = 差,重复循环{int tmp = x - y;x = y;y = tmp;}}return 0;
}

暴力穷举法

暴击穷举法就是简单粗暴地把 1~ y(前面已经假设 x > y)都列出来分别判断是否为 x、y 的公约数,然后再找到其中最大的一个。

暴力穷举法最大的特点就是简单直接、很容易理解,但是计算比较繁琐。

代码实现

#include<stdio.h>
int gcd(int x, int y)
{int temp = 0;for (temp = x; ; temp--){if (x % temp == 0 && y % temp == 0)break;}return temp;
}
int main()
{int m, n;scanf_s("%d%d", &m, &n);printf("%d", gcd(m, n));return 0;
}

递归法

计算最大公约数gcd(m,n),用递归形式定义如下:

  • 若m%n等于0,则gcd(m,n)等与n
  • 否则,gcd(m,n)等于gcd(n,m%n)。

  用递归方式编写函数gcd(m,n)。编写测试程序求公约数(1,8)、(3,93)、(27,0)、(9885,7651) 

代码实现

#include<stdio.h>
int gcd(int m, int n)
{if (m == 0 || n == 0) return 0;else if (m % n == 0) return n;else gcd(n, m % n);
}
int main()
{int m,n;scanf_s("%d%d", &m,&n);printf("%d", gcd(m,n));return 0;
}

测试及结果

编写测试程序求公约数(1,8),(3,93),(27,0),(9885,7651)

以上就是全部解析啦。如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。
关注我,让我们一起学习,一起成长吧!  


http://chatgpt.dhexx.cn/article/b86DYO24.shtml

相关文章

自由度为什么是n-1?敲黑板敲黑板啦

在抽样分布定理中相信很多小伙伴都很疑惑&#xff0c;这个为什么第三个服从的是自由度为n-1的卡方&#xff1f;话不多说&#xff0c;我们一起来看看吧 同理&#xff0c;这个默认的条件限制&#xff0c;也是当初为什么要进行修正样本方差。如果各位小伙伴还有疑问&#xff0c;可…

什么是GUN?

1 什么是GUN&#xff1f; 既然是说linux&#xff0c;那就不得不提下GNU&#xff0c;就是因为GNU才使得包括linux在内的很多开源软加蓬勃发展起来。 GNU技术是在1983年9月27号公开发起的&#xff0c;创始人是Richard Stallman,目的是创建一套完全自由的操作系统。 由于当时Uni…

工业机器人的自由度是什么?

机器人家上了解到&#xff0c;随着机器人产业的飞速发展&#xff0c;工业机器人已经广泛应用于各行各业&#xff0c;从材料搬运到机器维护&#xff0c;从焊接到切割&#xff0c;从装配到喷涂&#xff0c;我们发现&#xff0c;这些工业机器人形状各异&#xff0c;功能性能各不相…

总时差与自由时差

定义 总时差&#xff08;总浮动时间&#xff09;&#xff08;TF&#xff0c;Total Free Time&#xff0c;不耽误项目总进度&#xff09;LS&#xff08;Latest Start&#xff09;-ES&#xff08;Earliest Start&#xff09;LF&#xff08;Latest Finish&#xff09;-EF&#xff…

【概率论与数理统计】如何理解自由度n?

统计学上常常说的自由度是到底是什么&#xff1f; 在样本方差计算中&#xff0c;分母不是样本数量&#xff0c;而是样本量减一&#xff0c;人们一般认为减一是因为缺少一个自由度的原因&#xff0c;那么这个自由度的概念到底是什么&#xff1f; 解答 自由度不容易解释&#x…

自由变量

1&#xff0c;作用域和自由变量 作用域代表了一个变量的合法范围&#xff0c;一个变量的作用域是程序源代码中定义的这个变量的区域。 1&#xff0c;全局作用域 不在任何函数内声明的变量&#xff08;函数内省略var的也算全局&#xff09;称作全局变量 就是在最外层定义的变量…

谓词逻辑——自由变元与约束变元

谓词逻辑 命题逻辑在是具有局限性的。 命题逻辑在处理语句成分中有诸如“否”、“并”、“或”和“如果那么”时&#xff0c; 取得了令人满意的结果&#xff0c; 但人类语言比这丰富得多&#xff0c; 我们如何处理如“存在”&#xff0c; “所有”&#xff0c;“在中”&#x…

JS - 自由变量与作用域链

先解释一下什么是“自由变量”。 在A作用域中使用的变量x&#xff0c;却没有在A作用域中声明&#xff08;即在其他作用域中声明的&#xff09;&#xff0c;对于A作用域来说&#xff0c;x就是一个自由变量。如下图 如上程序中&#xff0c;在调用fn()函数时&#xff0c;函数体中第…

2. 自由度

目录 1. 自由度的定义 2. 自由度的计算 2.1 刚体的自由度 2.2 运动副 2.3 自由度算例 2.4 自由度计算公式 3. 总结 1. 自由度的定义 自由度在很多领域中会出现&#xff0c;对于机器人而言&#xff0c;我们这里谈的也就是机构的自由度。任何一台机器人都可以认为是一个机…

自由度

刚体的自由度 自由度指物体能够对坐标系进行独立运动的数目&#xff0c;物体所能进行的运动如下图&#xff1a; 一个物体可以相对于坐标系&#xff0c;进行三个平移和三个旋转运动&#xff0c;即一个简单的物体有六个自由度。 2 运动副与关节 运动副是两构件直接接触并能产…

约束度与自由度

约束度与自由度 无论是在机械原理与机械设计课程&#xff0c;还是在理论力学课程中&#xff0c;我们都会遇到约束度与自由度&#xff0c;但我未曾想在宇哥的线性代数课上也能听到这两个熟悉的名词。在线性代数第四讲线性方程组课程中&#xff0c;宇哥在讲到齐次线性方程组的有解…

这是你希望的自由职业么

每到周末文章的打开率和阅读量就变得惨淡的不行&#xff0c;索性就不分享干货&#xff0c;闲聊一下九月份私活结束后的自由职业经历。看看这是否是你向往的自由职业生活状态么&#xff1f; 九月份&#xff0c;忙完了手头的项目&#xff0c;也没心思找工作&#xff0c;一心想着借…

计算机屏幕截图按什么键,电脑按什么键自由截图

在我们工作生活中经常需要用到电脑截图来截取保存些重要信息&#xff0c;不过对于电脑新手来说还是不太清楚电脑怎么截图&#xff0c;问小编电脑按什么键自由截图。那今天小编就给大家介绍一个电脑截图的快捷方式&#xff0c;希望能帮到大家。 台式电脑使用快捷键进行截图&…

什么是机器人的自由度

自由度是机器人的一个重要技术指标&#xff0c;它是由机器人的结构决定的&#xff0c;并直接影响到机器人的机动性。 1. 刚体的自由度 物体上任何一点都与坐标轴的正交集合有关。物体能够对坐标系进行独立运动的数目称为自由度&#xff08;DOF&#xff0c;degree of freedom)。…

讲讲什么是自由度

总第223篇/张俊红 我们在前面的方差分析中有提过一个概念就是自由度&#xff0c;在前面文章中给了一个计算就是自由度样本数-1。这一篇就来具体聊聊什么是自由度。 先来看看百度百科的解释&#xff1a; 自由度(degree of freedom, df)指的是计算某一统计量时&#xff0c;取值不…

什么是自由软件?

关注星标公众号&#xff0c;不错过精彩内容 来源 | www.gnu.org 编排 | strongerHuang 可能你认为免费软件&#xff0c;就是自由软件&#xff0c;那么你肯定错了&#xff0c;下面来听听专家怎么描述自由软件的。 strongerHuang 1 自由软件定义 开源&#xff08;Open source&…

解构“自由”

“知乎”上有一个高票答案&#xff0c;研究了“什么样的人最自由”这个问题&#xff0c;作者“清流”说1&#xff1a; 我以前跟我的第一任老板讨论过一个问题&#xff1a;人类想要自由还是不想&#xff1f;结论是&#xff0c;绝大多数人本质上是不想要自由的&#xff0c;他们想…

Kettle工具入门

Kettle工具入门 Kettle工具入门 Kettle是什么&#xff1f;为什么要用Kettle&#xff1f;怎么用Kettle&#xff1f; 下载运行简单应用 表到表转换json到表的操作参考 Kettle是什么&#xff1f; Kettle是水壶。 “多喝热水”是我们对女朋友美好的祝福。因为未经处理的生水&#…

kettle安装及使用

文章目录 1、kettle简述1.1、kettle是什么 2、kettle安装配置2.1、先决条件2.1.1、安装jdk8 2.2、kettle下载2.3、打开kettle 3、kettle基本概念3.1、转换和作业3.2、运行工具3.2.1、SPOON3.2.2、KITCHEN和PAN3.2.3、Carte kettle基本使用及常见问题 1、kettle简述 1.1、kettl…

Kettle的下载安装教程和使用简介(内含第一个kettle转换案例)

本文首先介绍Kettle工具的安装及基本概念&#xff0c;然后通过一个案例实操介绍Kettle工具的使用。 本文重要的内容如下&#xff1a; Kettle的安装 1.Java的安装 登录Java的官网后&#xff0c;进入到下载页面&#xff1a;http://www.oracle.com/technetwork/java/javase/downl…