老钟古

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
最大公约数是数论中一个很基本的概念,求两个数的最大公约数有几种方法,可以求出两个数的所有约数,然后选择相同的最大的约数,这是一种比较笨的方法,高效的算法是由几千年以前的欧几里得提出来的,其根本思想就是利用辗转相除法来进行求解,这个可以参考一些相关的数论的书籍来获得算法的正确性,算法的实现可以参考下面。
代码
 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 int GCD(int a, int b)
 6 {
 7       if (a == 0)
 8           return b;
 9       if (b == 0)
10           return a;
11       int r = 0;
12       r = a % b;
13       while (r != 0)
14       {
15           r = a % b;
16           a = b;
17           b = r;
18       }
19       
20       return r;
21 }
22 
23 int main()
24 {
25     int n, m;
26     while (scanf("%d %d"&n, &m) != EOF)
27     {
28        if ((n == 0&& (m == 0))
29           break;
30         printf("%d\n", GCD(n, m)); 
31     }
32     
33     system("pause");
34     return 0;
35 }
36 

 

posted on 2010-10-25 14:18  老钟古  阅读(347)  评论(0编辑  收藏  举报