/*
打表找到等比求和公式 :(1-m^(n+1))/(1-m);
在素数mod 下求inc(1-m),quickm(m^(n+1),
answer=quick(m^(n+1))-1 * inc(1-m).
*/
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
int quickm(int n,int m)
{
ll a=1,x=n;
while(m)
{
if(m&1) a =(a*x)%mod;
x=(x*x)%mod;
m /=2;
}
return a%mod;
}
void gcd(ll a,ll b,ll &d,ll &x,ll &y)
{
if(!b) {d=1;x=1;y=0;}
else
{
gcd(b,a%b,d,y,x); y-= x*(a/b);
}
}
int inc(int a,int mod)
{
ll x,y,d;
gcd(a,mod,d,x,y);
return d==1?(x+mod)%mod:-1;
}
int main()
{
int t,n,m;
cin>>t;
while(t--)
{
cin>>n>>m;
ll ans=quickm(m,n+1)-1;
ll ic=inc(m-1,mod);
ans *=ic;
ans %=mod;
cout<<ans<<endl;
}
return 0;
}
hdu 5793 A Boring Question 数学
最新推荐文章于 2020-01-26 23:23:47 发布