【C语言】辗转相除法求最大公约数(详解)

这篇具有很好参考价值的文章主要介绍了【C语言】辗转相除法求最大公约数(详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

辗转相除法求最大公约数

辗转相除法求最大公约数c语言代码,算法

辗转相除法(又称欧几里德算法)是一种用于求解两个整数的最大公约数的方法。本文将使用C语言来实现辗转相除法,并对其原理进行解释。

辗转相除法的原理

辗转相除法的原理非常简单。假设有两个整数a和b,其中a > b。通过对a除以b求余数,得到余数r1。然后把b除以r1求余数,得到余数r2。如此重复,直到得到余数为0。那么这一系列的余数中的最后一个非零余数,就是a和b的最大公约数。即:

gcd(a, b) = gcd(b, r1) = gcd(r1, r2) = gcd(r2, r3) = … = gcd(r(n-1), rn) = gcd(rn, 0)

C语言实现

普通方法:

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int x = 0;

	scanf("%d %d", &a, &b);
	if (a < b)
	{
		//交换两个元素
		x = a;
		a = b;
		b = x;
	}
	else
	{
		//如果进入else,就是a>b,x就会为0,循环就会结束
		x = a % b;
		while (x != 0)
		{
			x = a % b;
			a = b;
			b = x;
		}
		printf("%d", a);
	}

	return 0;
}

下面是使用C语言实现辗转相除法求最大公约数的代码示例:

#include <stdio.h>

// 辗转相除法求最大公约数
int gcd(int a, int b) 
{
	if (b == 0)
	{
		return a;
	}
	else
	{
		return gcd(b, a % b);
	}
}

int main() {
	int a = 0;
	int b = 0;
	printf("请输入两个整数:");
	scanf("%d %d", &a, &b);
	int result = gcd(a, b);
	printf("最大公约数为:%d", result);
	return 0;
}

在上述代码中,我们使用递归的方式来实现辗转相除法。函数gcd接受两个整数a和b作为参数,如果b等于0,则返回a,否则递归调用自身,将b和a除以b取余数后的结果作为新的参数传入。直到b为0时,递归结束,返回a作为最大公约数。

main函数中,我们从用户输入获取两个整数a和b,然后调用gcd函数求得最大公约数,最后将结果输出。

运行结果

假设我们输入两个整数12和18,运行上述代码后,将得到如下输出:

请输入两个整数:12 18
最大公约数为:6

这说明12和18的最大公约数是6,验证了辗转相除法的正确性。

总结

辗转相除法是求解两个整数的最大公约数的一种常见算法。本文中,我们使用C语言实现了辗转相除法,并简要说明了其原理。通过实际的代码演示和运行结果,我们验证了辗转相除法的正确性。希望能够帮助到你理解该算法的实现过程。文章来源地址https://www.toymoban.com/news/detail-724384.html

到了这里,关于【C语言】辗转相除法求最大公约数(详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言辗转相除法运用 24/1/22笔记错题整理

    题目: 思路:一开始用最普通的方法去解题,计算量较大,但是 求最大公约数常用的有两种简单方法,一是九章算术中的 更相减损术 :大数减小数直到相等,相等的数即最大公约数,该算法 时间复杂度约为O(N) ;二是欧几里得的 辗转相除法 :大数除以小数取余数(相当于模

    2024年01月23日
    浏览(42)
  • C语言的三个经典题目:三步翻转法、杨氏矩阵、辗转相除法

    三步翻转法是C语言中用来求旋转字符串的一种进阶方法,我们以具体例题对其进行介绍。 例:求一个字符串左旋n个字符后得到的新字符串 普通方法实现 我们知道,左旋一个字符一共分为三步: 将字符串的第一个字符存放到临时变量中; 将字符串中除’\\0’外的所有字符整

    2024年02月02日
    浏览(37)
  • 算法--辗转相除法

    遇到一题算法题,如下: 求字符串的最大公因子? 对于字符串 s 和 t,只有在 s = t + … + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。 给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2 。 约数。整数a除以整数b(b≠0)除得

    2024年02月13日
    浏览(34)
  • 算法通关村十三关 | 辗转相除法、素数和丑数

            辗转相除法又称欧几里得算法,求两个数的最大公因数,希腊数学家喜欢用图形来处理问题,于是 将要求最大公约数问题转化为,以两个数字构成矩形,寻找可以铺满整个矩形的最大正方形的边长问题。 例如8和12的最大公因数是4,记作gcd(8,12)=4,辗转相除法的规则

    2024年02月09日
    浏览(36)
  • 快乐地谈谈:关于RSA算法中求私钥d的欧几里得方法(辗转相除法)考试向的欸

    关于RSA算法本身,就提及一下,它是属于非对称密码体制. 基本的加密方式就如下图所示: c为加密后的密文,m为加密前的明文 其中一般会给出公开密钥n、e的值,这样根据规则,便可以实现加密过程。而题目往往需要进行解密,那么就需要 先求解出p、q,随后再求解出私钥

    2024年02月04日
    浏览(26)
  • 辗转相除为什么能得到最大公因式?高等代数1.2

    我们来继续探索两个多项式之间的关系,今天的研究对象是最大公因式。 一)最大公因式 因式 :g(x)|f(x),则f(x)=h(x)*g(x),g(x)是f(x)的 因式。 倍式:f(x)是g(x)的倍式。 最大公因式的定义如下图。 最大公因式从字面上就可以理解了,一是公因式,二是要最大的那一些,至于为什么

    2024年02月06日
    浏览(34)
  • C语言—最大公约数和最小公倍数

    作者主页: paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者: 大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于 《算法详解》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将算法基础知识一网打尽,希望

    2024年02月13日
    浏览(26)
  • 【C语言】求最大公约数和最小公倍数

    方法一:利用 定义法 求最大公因数和最小公倍数 方法二:最小公倍数求法同上, 最大公约数方法不同 方法一方法二的结果示例如下   方法三:利用 辗转相除法 求最大公约数和最小公倍数 法(1)结果示例如下:  法(2)示例结果如下:  以上就是用C语言循环和循环之前的

    2024年02月07日
    浏览(32)
  • 最大公约数的三种求法——(C语言)

    如何求解最大公约数,首先了解什么是最大公约数, 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。 例: 在2、4、6中,2就是2,4,6的最

    2024年02月02日
    浏览(35)
  • C语言—求最大公约数(4种算法思路)

    如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。 用a对b求余,若余数为0,则除数b为最大公约数。若余数不为0,将此余数r作为新的除数,b作为新的被除数,重新

    2024年04月13日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包