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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了辗转相除法求最大公约数c语言代码相关的知识,希望对你有一定的参考价值。

辗转相除法是在在维基百科中的意思是:
在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21( \\displaystyle 252=21\\times 12;105=21\\times 5 \\displaystyle 252=21\\times 12;105=21\\times 5);因为 252 − 105 = 21 × (12 − 5) = 147 ,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。由辗转相除法也可以推出,两数的最大公约数可以用两数的整数倍相加来表示,如 21 = 5 × 105 + (−2) × 252 。这个重要的结论叫做裴蜀定理。
在现代密码学方面,它是RSA算法(一种在电子商务中广泛使用的公钥加密算法)的重要部分

简单的来说辗转相除法的原理就是:

先比较两个数使第一个数为最大数a,第二个数为最小数b
使最大数%最小数得到余数a%b=temp
后将余数赋值给最小数a=temp再去除最大数b即b%a
一直往复直到余数不为0
参考技术A #include <stdio.h>
int main()
int a; // 除数
int b; // 被除数
int r=1;  // 余数,赋初值为1
printf("输入除数与被除数(空格分开):");
scanf("%d %d",&a,&b);
while(r!=0) // 如果a<b,亦无需颠倒ab,在计算中商0余除数本身,在下次运算中自可颠倒回来
r = a % b;
a = b;
b = r;

printf("最大公约数为:%d\n",a); // 此时b的值已经在a中了,所以输出的a就是最大公约数
return 0;
参考技术B C语言如何求最大公约数?错觉?C语言两行代码描述辗转相除法

辗转相除法

欧几里德算法又称辗转相除法,欧几里德算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里德在其著作《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。

代码描述--新手版本

这种写法是非常简单的思路

1.先求两者中的最大值
2.再用循环描述辗转相除即可
源码:

C语言试题七十八之请编写函实现求2个数的最大公约数和最小公倍数(辗转相除法)

1、 题目

求2个数的最大公约数和最小公倍数

2、思路:

(1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
(2)求最大公约数用辗转相除法(又名欧几里德算法)

3 、温馨提示

      C语言试题汇总里可用于计算机二级C语言笔试、机试、研究生复试中C程序设计科目、帮助C语言学者打好程序基础、C语言基础,锻炼您的逻辑思维和解决问题的能力,帮助你成为C语言笔试、机试解题高手,帮助你拿到C语言工作的offer,每一个题目都附带源代码和运行结果,让你不再有任何困惑,妈妈再也不担心我的C语言了。如果程序有任何看不懂或者哪个步骤不理解的地方都可以加我微信(15874274916)私聊我,或者有更好的思路解决办法都可以加我微私聊,一起探讨、希望可以正真的帮助到你,同时也可以扫下面的二维码关注我微信公众号,比如你还对生活、美食或者其它方面都感兴趣,都可以加微信交流,博主擅长讲解计算机相关方面的知识、如果大家对计算机方向、前端、移动端、服务端、数据结构、算法、网络、高数等等一些列方向比较迷茫或者不知道要学哪些?或者具体怎么学?或者其它方向有任何困惑都可以找我交流,谢谢大家关注。

以上是关于辗转相除法求最大公约数c语言代码的主要内容,如果未能解决你的问题,请参考以下文章

c语言求最大公约数

c语言辗转相除法 将十进制转换成任意进制的数 运行结果出错,与正确不符,求指导哪里出错

用辗转相除法求两个整数的最大公约数

C语言辗转相除法求2个数的最小公约数

两行代码求解C语言最大公约数

C语言试题七十八之请编写函实现求2个数的最大公约数和最小公倍数(辗转相除法)