Link: https://ac.nowcoder.com/acm/contest/11334/A
Fonte: Niuke
Descrição Título
Invenção da cola bovina, um dado de n lados (pontos respectivamente de {1} a {1} NN, probabilidade de lançamento de cada avião é \ FRAC {1} {n}
n
1 ) para jogar com a carne, carne porque Ele é um imperador europeu, então ele queria testar o caráter de Niuniu. Ele disse a Niuniu para deixar Niuniu rolar m {} m dados. Se Niuniu rolar todos os rostos com {} nn, até Niuniu ganha, Niuniu acredita em si mesmo. Pin, basta apostar em um pacote de barras picantes com Niu Coke, dizendo que ele definitivamente pode jogar todos os pontos por {} nn macarrão, mas Niu Niu está com um pouco de medo de perder a aposta. Quero que você o ajude a calcular sua probabilidade de perder com antecedência? Descrição da entrada: Existem vários grupos de exemplos de entrada, a primeira linha é o número de grupos de amostra t (t \ leq 1 × 10 ^ 6) t (t≤1 × 10 6 ) As próximas t linhas têm cada um inteiro n e m, Indica o número de faces dos dados e o número de lances do touro
(N, m <= 1 × 10 ^ 9) (n, m <= 1 × 10
9
)
Descrição de
saída : saída t linhas, cada linha é produzida na forma de pontuação p / q mod 1e9 + 7
Exemplo 1 Cópia de
entrada 1 2 1 Cópia de saída 500000004 Observações: Os dados são maiores, é recomendado usar entrada e saída mais rápidas
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int mod = 1e9 + 7;
typedef long long LL;
LL qmi(int a, int b, int mod){
LL res = 1 % mod;
while(b){
if (b & 1) res = res % mod * (a % mod) % mod;
a = (LL)a % mod * a % mod;
b >>= 1;
}
return res % mod;
}
int main(){
int T;
scanf("%d", &T);
while(T --){
int n, m;
scanf("%d%d", &n, &m);
// cout << qmi(2, 5, mod) << endl;
LL P1 = qmi(n, m, mod) - 1;
LL temp = P1 + 1;
// cout << temp << endl;
LL P2 = qmi(temp, mod - 2, mod);
// cout << P2 << endl;
LL ans = (P1 * P2) % mod;
printf("%lld\n", ans);
}
return 0;
}