研习1

gcd

$gcd(n,m)=gcd(m,n \%m)$

一个常识

如果$a\leq b$ 并且$b\leq a$那么$a=b$

一个引理

假设$k|a,k|b$ 则对于任意的$x,y属于z,k|(xa+yb)$ 均成立

证明:

$k|a \to a=pk$ $k|b \to b=qk$

于是有$xa+yb=xpk+yqk=(xp+yq)k$

因为$k|(xp+yq)k$所以$k|(xa+yb)$

gcd的Euclid证明

证明:

令$k=gcd(n,m)$ 则$k|n$并且$k|m$

令$j=gcd(m,n\%m)$ 则$j|m$并且$j|(n \%m) $

对于$n$ 可以用$m$表示为$n=p\times m +n\%m$

由引理可知$j|n$(其中$x=p,y=1$),又$j|m$ 于是$j是n和m的公因数(但补一定最大)$

因为$k$是$m和n的最大公因数$ 所以$j\leq k$

通过另一种方式得到$n\%m=n-p\times m$

所以$k$是$n\%m$的因子,又$k|m$。于是$k是n\%m和m的公因子$ (但不是最大)

又$j>=k$ 所以$j==k$

所以$gcd(n,m)=gcd(m,n\%m)$

exgcd

求方程$ax+by=gcd(a,b)$的一个解

如果$b=0$ 那么$gcd(a,b)=a,取x=1,y=0$即可

否则:根据$gcd(a,b)=gcd(b,a\%b)$

那么递归求解$ bx+a\%by=gcd(a,b)$的解

然后推当前$x,y$

设$bx+a\%by=gcd(a,b)$的解为$x0,y0$

$ax+by=gcd(a,b)=bx0+a\%by$

$=bx0+(a-a/b\times b)y0$

$=bx0+ay0-a/b\times b y0$

$=ay0+b(x0-a/b \times y0)$

所以$x=y0,y=x0-a/b\times y0$