小冰最近买了一大堆零食和饮料,一共有 a 包零食以及 b 杯饮料。他想要将这些零食和饮料尽可能多的分给冰冰妙妙屋中的小伙伴们。但有一个条件,每个小伙伴分到的零食和饮料数要相等,否则小伙伴们会吃醋的喵。也就是说,他需要找到一个数 k,使得 k 既能整除 a 也能整除 b。
形式上,你需要找到 a 和 b 的最大公约数 k。
这道题的正确是辗转相除法,用到了递归以及函数的思想,它的结论是:a 和 b 的最大公约数,等于 b 和 a % b 的最大公约数。当 b 变为 0 时,a 就是所求的最大公约数。
即 gcd(a, b) = gcd(b, a % b),当 b 变为 0 时 a 即为所求。
输入
输入两个正整数,代表小冰给他的小伙伴们买的零食数 a (1 \leq a \leq 10^9) 和饮料数 b (1 \leq b \leq 10^9)。
输出
输出零食数和饮料数的最大公约数 k。
样例
| 标准输入 复制文本 |
54 24 |
| 标准输出 复制文本 |
6 |
提示
其中的一种辗转相除法的 c++ 实现如下:
int gcd(int a, int b) {
return b ? gcd(b, a % b) : a;
}