#A1044. 辗转相除法

辗转相除法

题目描述

辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

两个整数的最大公约数(Greatest Common Divisor)是能够同时整除它们的最大的正整数,缩写为gcd。辗转相除法基于如下原理:

定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数.

用数学语言表示就是:gcd(a,b)=gcdbagcd(a,b)=gcd(b,a%b)b)

在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。

例如,计算a=1071a = 1071b=462b = 462的最大公约数的过程如下:

(1)让10711071除以462462得到余数:147147,所以gcd(1071,462)=gcd(462,147)gcd(1071,462)=gcd(462,147)

(2)让462462除以147147得到余数:2121,所以gcd(462,147)=gcd(147,21)gcd(462,147)=gcd(147,21)

(3)让4747除以2121得到余数:00,所以gcd(147,21)=gcd(210)gcd(147,21)=gcd(21,0)

(4)此时较小的数已经是00,所以gcd(210)=21gcd(21,0)=21.

所以gcd(1071,462)=21gcd(1071,462)=21

输入格式

一行2个自然数 nnmm,保证1mn1091\le m,n \le 10^9

输出格式

只有一行一个整数,表示nnmm的最大公因数

36 24
12
2520 2160
360