欧几里得算法
公式表述:
证明:
a 可以表示为 a = kb + r,r = a%b
假设 d 是 (a,b) 的一个公约数,则有
d|a,d|b,而 r = a – kb,因此 d|r
所以 d 也是 (b,a%b) 的公约数.
除了上面这个经典算法,还有 stein 算法用来求解最大公约数,只有整数的移位和加减法,比欧几里得算法在大整数上更有优势,可以去了解一下。
扩展欧几里得算法求解贝祖等式
贝祖定理(一般形式)
对于不全为 0 的自然数 a,b,则必然存在整数 x , y (不唯一)满足等式
上面的等式就称做贝祖等式。
扩展欧几里得算法能够求解贝祖等式的正确性证明
设 a > b
- 当 b = 0 时,gcd(a,b) = a
贝祖等式即 ax = a,解得 x = 1,y 可以取 y = 0 - 当 b > 0 时,
假设 a,b 的贝祖等式的解为,即
b,a%b 的贝祖等式的解为,即
由欧几里得算法可知
故
即
由恒等关系可得即贝祖等式 1 的解可以由 贝祖等式 2 的解得到,这是一个递归求解的过程,并且随着对 a,b 进行辗转相除,贝祖等式的系数会越来越小,直至变为情况1,而情况1贝祖等式的解是有具体的值的,即 x = 1,y = 0。然后进行回溯计算,最终可以得到
。
C++代码如下:
\\exGcd函数返回a,b最大公约数。贝祖等式的整数解为引用参数x,y
int exGcd(int a, int b, int& x, int& y){
if(b == 0){
x = 1;
y = 0;
return a;
}
int r = exGcd(b,a%b,x,y);
int t = x;
x = y;
y = t - a/b*y;
return r;
}
贝祖定理(更原始形式)的证明
若整数 a,b 互质,则存在整数解 x,y 满足 ax + by = 1
证明:
设分别是使得
的整数集合,
令,假设此时
则有
假设 除以
的商为
,余数为
则有
但是因为其中,所以必须有
否则与假设
矛盾
故,同理可得
即 为
的公约数,又
互质
所以有
即存在整数使得
成立。
网友评论