1. 欧几里得算法
求两个正整数的最大公约数,时间复杂度 O(logn)。
C++ 代码
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
2. 扩展欧几里得算法
裴蜀定理:若 a,b是整数,且 (a,b)=d,那么对于任意的整数 x,y,ax+by 都一定是 d 的倍数,特别地,一定存在整数 x,y,使 ax+by=d 成立。
扩展欧几里得算法可以在 O(logn)的时间复杂度内求出系数 x,y。
C++ 代码
int exgcd(int a, int b, int &x, int &y)
{
if (!b)
{
x = 1; y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);