我恨数论 因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数 咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)? 首先,设 p = a/b,c = a mod b 则a = p*b + c m = gcd(a,b),n = gcd(b,c) 因为m = gcd(a,b),所以 a | m 且 b | m 因为 b | m 所以 b * p | m // a|b,则a*k|b (k为整数)…
并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分解为素因子的乘积,形如: 则显而易见的有一下结论: 相乘,得: 得证 几种求gcd的算法 欧几里得算法(辗转相除法) 辗转相减法(优化:stein_gcd) 欧几里得算法 基于事实: 实现: int gcd(int a, int b){ ) ? a : gcd( b , a % b) ; } 简短而…
gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } return n; } 二.递归法 int Gcd(int a, int b) { ) return a; return Gcd(b, a % b); } 但exgcd是个什么玩意??? 百度了一下,百科这么讲的: 对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然…