最大公约数与最小公倍数问题
最大公约数与最小公倍数问题
最大公约数
uint64_t gcd(uint64_t x, uint64_t y)
{
uint64_t ret = 1;
if (x == y) {
return y;
}
while (true) {
if (x < y) {
uint64_t t = x;
x = y;
y = t;
}
if (0 == y) {
return x * ret;
}
if (0 == x & 0x01) {
if (0 == y & 0x01) {
ret <<= 1;
x >>= 1;
y >>= 1;
} else {
x >>= 1;
}
} else {
if (0 == y & 0x01) {
y >>= 1;
} else {
x -= y;
}
}
}
}
最小公倍数
uint64_t lcm(uint64_t x, uint64_t y)
{
if (0 == x || 0 == y) {
return 0;
} else {
return x / gcd(x, y) * y;
}
}