1.欧几里得算法
gcd(a,b) = gcd( b , a%b );
2.扩展欧几里得算法
已知a, b求解一组x,y,使它们满足等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。
x、y的解集为:
x = x1 + b / gcd(a,b) * t
y = y1 - a / gcd(a,b) * t;
(t 为任意值)
反证:
将x、y代入原式ax + by = gcd(a,b)中得:
a(x1 + b / gcd(a, b) * t) + b(y1 - a / gcd(a,b) * t) = gcd(a,b)
化简后得:
ax1 + by1 = gcd(a,b)
所以可得解集正确
3. 线性同余方程:
对于方程:ax≡b(mod m),a、b、m都是整数,求解x的值。
ax≡b(mod m)表示:(ax - b) mod m = 0,即同余。
ax≡b (mod n) 等价于 ax = ny +b ,也就是 求解 ax + ny = b 。
利用扩展欧几里得求出:x0,y0.
t = n/gcd(a,n)
x的 最小正整数解x1 为 : x1 = (x0 % t + t) % t,
对应的 y1 = (c - a*x1) / b.
t= a/gcd(a,n)
y的 最小正整数解 y2 为 : y2 = ( y % t + t) % t,
对应的 x2 = (c - n*y2 )/ a.
4.不定方程。
ax+by = c.
利用扩展欧几里得求解。
5.乘法逆元:
若有 a*x ≡ 1 (mod m),则称 x 为a关于m的乘法逆元,等价式 a * x+m * y = 1
对于两个数a,p若gcd(a,p)=1,则一定存在另一个数b,使得ab≡1(mod p),并称此时的b为a关于 1 模p的乘法逆元。
我们记此时的b为inv(a)或a^-1。
(a/b)%k = (a/b)*(1)%k = (a/b)*( b*x )%k=a*x%b ,x是b的逆元
所以 (a/b)%k = a*inv(b) %k.
ps: 求解 ( a/b )%m 时 一般想法是 转化为(a%(b*m))/b,转化过程如下
令k = (a/b)/m(向下取整), x = (a/b)%m;
a/b = k*m + x (x < m);
a = k*b*m + b*x;
a%(b*m) = b*x;
a%(b*m)/b = x;
得证: a/b%m = a%(b*m)/b;(公式适用于很多情况:m不必是素数,b和m也不必互质)
6.费马小定理:
对于质数p,任意整数a,均满足:a^p ≡ a(mod p);
费马小定理求逆元: p为质数,a,p互质 . a*a^(p-1) ≡ 1(mod p);