1.扩展欧几里德算法
1.1 描述
- 用来在已知a和b求解一组x和y,使它们满足一定的等式:
ax+by = gcd(a, b) =d
(解一定存在,根据数论中的相关定理)。
1.2 核心代码
//返回值是a和b的最大公因数。
int exgcd(int a,int b,int &x,int &y){
//当b==0的时候,明显最大公因数是a,况且x=1,y=0;
if (b==0){
x=1,y=0;
return a;
}
//这个目前还没弄懂原因
int q=exgcd(b,a%b,y,x);
y-=a/b*x;
return q;
}
1.3 乘法逆元
- 扩展欧几里德算法不但能计算(a,b)的最大公约数,而且能计算a模b及b模a的乘法逆元。
1.4 应用
2.费马小定理
2.1 定义
- a^(p-1) = 1(mod p),其中p是素数。
2.2 两种使用情况
- a^b mod p 在b很大的时候可以先用b = b % (p-1)
- 在阶乘中减去除法的操作。a^(p-2) = 1/a(mod p)。