方法一:
ll extendGcd(ll a, ll b, ll &x, ll &y) {
ll ans, t;
if (b == 0) {
x = 1; y = 0;
return a;
}
ans = extendGcd(b, a%b, x, y);
t = x; x = y; y = t - (a / b)*y;
return ans;
}
ll inv(ll a, ll m) {
ll x, y, d;
d = extendGcd(a, m, x, y);
if (d == 1)
return (x%m + m) % m;
else
return -1;
}
利用扩展欧几里得求逆元,x关于MOD的逆元=inv(x,MOD);
(a/b)%MOD = a*inv(b,MOD)%MOD;
方法二:(打表)
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MAX = 1e6+10;
const ll mod = 1e9+7;
int inv[MAX];
int main()
{
//求逆元模板
inv[1]=1;
for(int i=2;i<MAX;i++)
inv[i] = 1LL * inv[mod%i]*(mod-mod/i)%mod;
}