欧几里得算法&其时间复杂度

欧几里得算法&时间复杂度

SeekLuna 2023.6.11

最大公约数

int gcd(int a,int b){

    return !b ? a : gcd(b,a % b);
}

最小公倍数

int lcm(int a,int b){

    return a / gcd(a,b) * b;
}

细节!

用欧几里得算法求$\gcd(a,b)$,无需关心a和b的大小

求$\operatorname{lcm}(a,b)$,应该先除后乘

$a,b$不同时为0,$\gcd(a,0),a\ne 0,\gcd(a,0) = a$

求$\gcd(a,b)$,令$a\ge b$,可以证明$a \bmod b \le \frac{a}{2};$

如果$b \le \frac{a}{2},a \bmod b < b \le \frac{a}{2}$,则$a \bmod b \le \frac{a}{2};$

如果$b > a,a0$除以$b$的商为$1$,则$a \bmod b;$

在欧几里得算法中,参数$b$的值每至少减半$(b = b / 2)$,时间复杂度为$:O(\log(n)),n = \max(a,b)$

突然发现今天的博客好短欸(

posted @ 2023-06-12 20:09  rksm2333  阅读(72)  评论(0)    收藏  举报  来源