hdu 5793 A Boring Question 数学

来源:互联网 发布:淘宝视频缓冲地址 编辑:程序博客网 时间:2024/05/01 21:59
/*    打表找到等比求和公式 :(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;}

原创粉丝点击