欧几里得算法
欧几里得算法(Euclidean Algorithm)也叫辗转相除法,是数论中的一项基本技术,它通过一个简单的过程来确定两个正整数的最大公约数。欧几里得算法基于下面的定理:
对任何非负整数a和b:
gcd(a, b) = gcd(b, a mod b) (a ≥ b)
可重复使用上式求出最大公约数。重复计算结束的条件是后一个整数等于0,此时前一个数即为二者的最大公约数。
#include <iostream>
#include <cmath>
template <typename T = int>
T gcd (T a, T b)
{
if (b == 0)
{
return a;
}
else
{
T tmp;
while (b != 0)
{
tmp = a % b;
a = b;
b = tmp;
//std::cout << a << " " << b << std::endl;
}
return a;
}
}
int main()
{
int x, y;
std::cin >> x >> y;
int result = std::abs(gcd(