C++计算最大公约数(辗转相除法)

原创 2012年04月13日 15:54:41

典型例题:

一.辗转相除法

例1 。求两个正数8251和6105的最大公因数。

(分析:辗转相除→余数为零→得到结果)

解:8251=6105×1+2146

显然8251与6105的最大公因数也必是2146的因数,同样6105与2146的公因数也必是8251的因数,所以8251与6105的最大公因数也是6105与2146的最大公因数。

6105=2146×2+1813

2146=1813×1+333

1813=333×5+148

333=148×2+37

148=37×4+0

则37为8251与6105的最大公因数。

以上我们求最大公因数的方法就是辗转相除法。也叫欧几里德算法,它是由欧几里德在公元前300年左右首先提出的。

1. 为什么用这个算法能得到两个数的最大公因数?

利用辗转相除法求最大公因数的步骤如下:

第一步:用较大的数m除以较小的数n得到一个商q0和一个余数r0

第二步:若r0=0,则n为m,n的最大公因数;若r0≠0,则用除数n除以余数r0得到一个商q1和一个余数r1

第三步:若r1=0,则r1为m,n的最大公因数;若r1≠0,则用除数r0除以余数r1得到一个商q2和一个余数r2

……

依次计算直至rn=0,此时所得到的rn-1即为所求的最大公因数。

 

 

练习:利用辗转相除法求两数4081与20723的最大公因数。

 

 

 

 

2。辗转相除法包含重复操作的步骤,因此我们可用__循环_______结构来构造算法,

利用辗转相除法求最大公因数的步骤:




【C/C++】求最大公约数的三种方法

一、最大公约数与最小公倍数 最大公约数,属于数论所探究的内容。 最大公约数可以通过下面的三种方法求出来。 最小公倍数呢,它与最大公约数的乘机为所求数之积。   比如求  x,y的最大公约数和最小公倍数...

C++项目参考解答-求最大公约数

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 【项...

C++算法 - 辗转相除法(求最大公约数)

问题及代码: /* * Copyright (c) 2014, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:.cpp * 作 者:何小乐 * 完成...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C/C++训练1---最大公约数与最小公倍数

Problem Description 输入两个整数,求它们的最大公约数与最小公倍数。 Input 输入两个整数,两个整数之间用空格分开。 Output 第一行输出最大公约数; 第二行...

C++求两个数的最大公约数

求两个数的最大公约数

算法学习 - 欧几里得算法(辗转相除法)(c++实现)

欧几里得算法欧几里得算法也叫辗转相除法,是求两个整数最大公约数的算法。当然也可以求最小公倍数。算法实现其实算法的实现原理就是,有整数a b两个,每次求的一个数字r = a % b,然后把b放到a的位置...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C++三种方法求解两个数最大公因数和最小公倍数

本人最近学习了三种求解两个数最大公因数的方法,第一种是辗转相除法,第二种是相减法,第三种是穷举法 方法一:辗转相除法: 首先判断m是否小于n,不然交换两个值,始终保持m永远是最大的值,求余d=m%n...

如何在C++中实现求两个整数的最大公约数和最小公倍数

原帖地址:http://blog.sina.com.cn/s/blog_6ff1f2130100v3xz.html 最大公约数: 如果有一个自然数a能被自然数b整除,则称a为b的倍...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++计算最大公约数(辗转相除法)
举报原因:
原因补充:

(最多只允许输入30个字)