题单:最大公约数(辗转相除法)
题目描述
所谓 “最大公约数(GCD)” ,是指所有公约数中最大的那个,例如 12 和 1818 的公约数有 1,2,3,6 ,所以 12 和 18 的最大公约数为 6 。
辗转相除法,又名欧几里德算法(Euclidean Algorithm),是求两个整数最大公约数的算法。这是已知最古老的算法,可以追溯到公元前 300300 年。它首次出现于欧几里德的《几何原本》中,在中国最早出现在东汉的《九章算术》中。
算法描述如下:设有两个整数 a,b ,
(1)令 r=a mod
(2)若 r=0、 ,则 b 就是最大公约数,算法结束;若 r≠0r≠0 ,则令 a=b,b=ra=b,b=r ,返回(1)。
举例来说,a=32,b=20,辗转相除的过程如下
最大公约数为 44 。
这个算法并不介意开始时 aa 和 bb 谁大谁小,运算速度很快。
你的任务:运用辗转相除法求两个数的最大公约数。
输入格式
一行两个正整数 a,b (1≤a≤b≤2×109)a,b (1≤a≤b≤2×109) 。
输出格式
一行一个正整数,为两个数的最大公约数。
样例 #1
样例输入 #1
20 32
样例输出 #1
4
提示
代码:
#include<iostream>
using namespace std;
int main(){int a,b,r;cin>>a>>b;r=a%b;while(r!=0){a=b;b=r;r=a%b;}cout<<b;return 0;
}