/*
打表找到等比求和公式 :(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;
}
07-17
07-17
07-28
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交