// 函数声明 longlonggcd(longlong a, longlong b); longlonglcm(longlong a, longlong b);
// --- 方法一:手动实现 GCD 和 LCM (推荐,兼容性好) ---
/** * @brief 使用欧几里得算法计算最大公约数 (GCD) * * @param a 第一个整数 * @param b 第二个整数 * @return long long a 和 b 的最大公约数 */ longlonggcd(longlong a, longlong b){ while (b != 0) { longlong temp = b; b = a % b; a = temp; } return a; }
/** * @brief 使用公式 (a * b) / gcd(a, b) 计算最小公倍数 (LCM) * * @param a 第一个整数 * @param b 第二个整数 * @return long long a 和 b 的最小公倍数 */ longlonglcm(longlong a, longlong b){ if (a == 0 || b == 0) { return0; // 0 和任何数的最小公倍数是 0 } // 为了防止 a * b 溢出,可以先做除法 // a * (b / gcd(a,b)) 同样有效 // 使用 std::abs 确保处理负数时结果为正 return std::abs(a * b) / gcd(a, b); }