如果p是素数,则a ^ (p - 1) = 1 % p
即a ^ (p - 2) * a = 1 % p
a ^ (p - 2)就是a的逆元
求快速幂的时候,最好先把a模一下。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 20;
const ll mod = 1e9 + 7;
ll n, inv[N];
ll ksm(ll a, ll b) {
ll ans = 1;
a %= mod;
while(b) {
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
ll get_inv(ll a) {
return ksm(a, mod - 2);
}
int main() {
scanf("%lld", &n);
cout << get_inv(n) << endl;
return 0;
}
补:取模运算中,相减,例如:(a - b) % mod,先把a加上mod,即:(a + mod - b) % mod。