欧几里得
gcd, lcm, exgcd
欧几里得—最大公约数
gcd(a, b) = gcd(b, a mod b)
1 | int gcd(int a, int b) |
一波应用:线段上格点个数—-挑战编程—-欧几里得
algorithm库的std::_gcd函数
1 |
|
最小公倍数(LCM)和最大公约数(GCD)
lcm(a, b) = (a*b)/gcd(a,b)
扩展欧几里得
基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。
当 gcd ( a , b )= d 时,求绝对值和最小的 x , y 使得 x a + y b = d 。
1 | //此算法即可求出gcd(a,b),也可求出x和y。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GreenHatHGのBlog!
评论