题目链接:https://ac.nowcoder.com/acm/contest/7412/A
前置知识:由费马小定理:
(1/a)%m = a^(m-2)%m
其中m为素数。
那么,(b/a)%m 就成 b * a^(m-2)%m
大体流程:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
#define ll int long long
const int mod = 1e9 + 7;
ll fp(ll base, ll power) {//快速幂
ll result = 1;
while (power) {
if (power & 1)//判定奇偶
result = result * base % mod;
power >>= 1;//相当于power/=2;
base = (base * base) % mod;
}
return result;
}
ll inv(ll base) {//由费马小定律所推
return fp(base, mod - 2);
}
int main() {
int t;
ll n, m;
scanf("%d", &t);
while (t--) {
scanf("%lld%lld", &n, &m);
ll ans = fp(n, m);
ll sums = (ans - 1) * inv(ans) % mod;
printf("%lld\n", sums);
}
}