最大公约数和辗转相除法

作者在 2006-09-14 08:24:00 发布以下内容

   在开始学习程序设计的时候会遇到有关于求最大公约数与最小公倍数的问题,因为用辗转相除法很好的解决了这一问题。当然在我们刚开始学的时候有种不知所以然的感觉,这不是奇怪的,毕竟是刚接触程序,同样也是第一次接触到关于算法的问题。在记忆理解的基础上这就不是一个问题了,和其它的知识一样,在我们记忆了--理解了--会运用了,这样就ok了。但是学习c或c++,我个人认为是和数学紧密相连的,也许以后参加了工作开始做一些的项目的时候不会太注意这些了。如果想学好编程,我认为学好数据结构、组合数学、博弈论等等是必要的。因为我个人对计算机编程也是初步涉猎,所以懂的也不是很多。说的可能又罗嗦有不在点上,敬请原谅。

著名数学家欧几里德发现了一种很简单的方法--辗转相除法很简单地解决了这个问题。在数学上用(a,b)表示a,b的最大公约数。
定理:设a,b,c是任意三个不全为0的整数,且 a=bq+c 其中q是整数,则a,b与b,c有相同的公约数,即(a,b)=(b,c)。

#include  <iostream>

using namespace std;
  
int main()
{
 int a, b, temp;
 int t;
 int sum ;

 cout << " Please input two number" << endl;
 cout << " The frist one :";
 cin >> a;
 cout << " The second one :";
 cin >> b;

 sum = a*b;

 if ( b > a)
 {
  temp = a;
  a = b;
  b = temp;
 }

 while ( b )
 {
  t = a % b;
  a = b;
  b = t;
 }

 cout << "最大公约数 :" << a << endl;
 cout << "最小公倍数 : " << sum/a << endl;

 return 0;
}

经典程序 | 阅读 2116 次
文章评论,共0条
游客请输入验证码
浏览111004次