总时间限制: 1000ms 内存限制: 65536kB

描述

给定两个正整数,求它们的最大公约数。

输入

有多组数据,每行为两个正整数,且不超过int可以表示的范围。

输出

行对应输出最大公约数。

样例输入

  1. 4 8
  2. 8 6
  3. 200 300

样例输出

  1. 4
  2. 2
  3. 100

思路

根据初等数论的欧几里得算法,我们可以知道:

已知2个正整数 a, b (其中 a > b ),他们的最大公约数 gcd(a, b) = gcd(b, a mod b)

边界条件为: gcd(a, 0) = a

代码

  1. #include <iostream>
  2. using namespace std;
  3. int euclid(int a, int b) {
  4. int temp;
  5. if(a < b) {
  6. temp = a;
  7. a = b;
  8. b = temp;
  9. }
  10. if( b == 0 ) return a;
  11. else return euclid(b, a % b);
  12. }
  13. int main() {
  14. int a, b;
  15. while( cin >> a >> b ) {
  16. cout << euclid(a, b) << endl;
  17. }
  18. return 0;
  19. }