如果 ax≡1(modb) a x ≡ 1 ( mod b ) 且 (a,b)=1 ( a , b ) = 1 ,则称 x x 是模 意义下的 a a 的逆元,记为 。
逆元可以用来在计算 tamodb t a mod b 时,转化为 ta−1modb t a − 1 mod b 。
Algorithm A l g o r i t h m
根据逆元的定义,可以转化为 ax+by=1 a x + b y = 1 ,用拓展欧几里得算法求解。
Code1 C o d e 1
\\求解单个数在模意义下的逆元(exgcd)
void Exgcd(int a, int b, int& x, int& y) {
if (b == 0) {
x = 1; y = 0;
return;
}
Exgcd(b, a % b, y, x);
y -= a / b * x;
}
int Mod_Inverse(int a, int p) {
int x, y;
Exgcd(a, p, x, y);
return (x + p) % p;
}
Code2 C o d e 2
int Exgcd(int a, int b, int& x, int& y) {
if (a == 0 && b == 0) return -1;
if (b == 0) {
x =