1、Euclidian algorithm
最大公因数(Greatest Common Divisor)
\(gcd(a,b)=gcd(b,a\%b)\)
//recursive version
int gcdr(int a,int b){
return (b==0)?(a):gcdr(b,a%b);
}
//iterative version
int gcdi(int a,int b){
while (b!=0) {
int r=a%b;//a=q*b+r
a=b;
b=r;
}
return a;
}
2、扩展欧几里得算法
定理:
\(if\ d=gcd(a,b),\ then\ \exists s,t\ d=s*a+t*b\)
因此如果\(gcd(a,b)=1\)即a,b互素,那么\(1=s*a+t*b\)恒成立
void gcde(int a,int b){
int s1=1,s2=0,s3;
int t1=0,t2=1,t3;
while(b!=0){
int q=a/b;
int r=a%b;
a=b;
b=r;
s3=s1-q*s2;
t3=t1-q*t2;
s1=s2;
s2=s3;
t1=t2;
t2=t3;
}
printf("%d %d %d",a,s1,t1);
}
应用:扩展欧几里得算法解丢番图方程
丢番图方程\(ax+by=c\ (x,y \in Z)\)
解法:
- d=gcd(a,b)
- if d|c, then infinite solutions.else no solution.
- 方程两边同除d,得到\(a_1*x+b_1*y=c_1\)
- 此时\(gcd(a_1,b_1)=1\),故\(a_1*s+b_1*t=1\)
- 显然方程有特解\(x=c_1*s,y=c_1*t\)
- 于是通解为\(x=c_1*s-k*b_1,y=c_1*t+k*a_1\)
3、加法逆元,乘法逆元
3.1关系relation
设R是非空集合X上的二元关系
- \(R是自反的\Leftrightarrow(\forall x)(x\in X\rightarrow xRx)\)
- \(R是反自反的\Leftrightarrow(\forall x)(x\in X\rightarrow x\overline{R}x)\)
- \(R是对称的\Leftrightarrow(\forall x)(\forall y)(x \in X \land y \in X\land xRy\rightarrow yRx)\)
- \(R是反对称的\Leftrightarrow(\forall x)(\forall y)(x \in X \land y \in X\land xRy\land yRx\rightarrow x=y)\)
- \(R是传递的\Leftrightarrow(\forall x)(\forall y)(\forall z)(x \in X \land y \in X \land z\in X \land xRy\land yRz\rightarrow xRz)\)
等价关系R
设R是非空集合X上的二元关系,如果R是自反的,对称的和传递的,则称R是等价关系。
同余关系
\(a\div n=q\cdots r\Rightarrow a\bmod n=r\)
a和b同余于m
\[ \left\{
\begin{aligned}
a\bmod m=r \\
b\bmod m=r
\end{aligned}
\right\}\Leftrightarrow a\equiv b\ (\bmod m).
\]
模m同余是整数集上的一个等价关系
\[
\begin{aligned}
proof&:\\
&1.\ a\equiv a(\bmod m)\Rightarrow自反性\\
&2.\ a\equiv b(\bmod m)\rightarrow b\equiv a(\bmod m)\Rightarrow对称性\\
&3.\ a\equiv b(\bmod m)\land b\equiv c(\bmod m)\rightarrow a\equiv c(\bmod m) \Rightarrow传递性\\
\end{aligned}
\]
3.2 加法逆元
\(if\ a+b=0\ \bmod m\ \rightarrow\ -a=b\)
即a的加法逆元-a是b
3.3 乘法逆元
\(if\ a*b=1\ \bmod m\ \rightarrow\ a^{-1}=b\)
即a的乘法逆元是b
\(iff.\ gcd(a,m)=1\rightarrow \exists a^{-1}\)
当 \(a^{-1}\) 存在时,使用扩展欧几里得算法求乘法逆元:
\[
\begin{aligned}
&\because gcd(m,a)=1\\
&\therefore \exists\ s,t\ 1=s*m+t*a\\
&\ 1\bmod m=(s*m+t*a)\bmod m=t*a\bmod m
\end{aligned}
\]
可知\(a^{-1}=t\) 很容易用扩展欧几里得求得乘法逆元