费马小定理求逆元
费马小定理定义及证明
- 为什么每一个(A_i imes a (mod p)) 是独一无二的?
对于任意两个(A_i imes a)而言, 二者的差值为a的整数倍,而((a,p)=1),因此((A_i,a) \% p) 一定不会得到相同的余数(同余的两个数的差值一定是mod的整数倍)。
- (forall A_i imes a \% p (i=1,2,...,p-1)) 所构成的序列是((1,2,...,p-1))的一种排列
因为 (x \% p in [0,p-1]),而已知(A_i imes a (mod p)) 是独一无二的,因此(forall A_i imes a \% p (i=1,2,...,p-1)) 所构成的序列是((1,2,...,p-1))的一种排列。
- 故得证 $prod_{i=1}^{n} A_i = prod_{i=1}^n (A_i imes a)(mod p) $
因此((a,p) = 1)则(a^{p-1} = 1 (mod p)) (p为素数,gcd(a,p) = 1)
费马小定理求逆元
(a imes b = 1 (mod p))则 (a,b)互为 (mod p)逆元
由费马小定理(a^{p-1} = 1 (mod p)),因此(a imes a^{p-2} = 1 (mod p)),因此a的逆元为(a^{p-2} (mod p))
typedef long long ll;
ll mod = 1e9 + 7;
inline ll quick_pow(ll base,ll idx){
ll ans = 1;
while(idx){
if(idx & 1){
ans *= base;
ans %= mod;
}
base *= base;
base %= mod;
idx >>= 1;
}
return ans;
}
inline ll inv(ll a){
return quick_pow(a,mod-2);
}