题目链接

https://ac.nowcoder.com/acm/contest/7412/A

解题思路

快速幂,费马小定理,快读函数,这仨就够用了。
本题而言,牛牛输的概率为1-1/(n^m)=(n^m-1)/(n^m)
费马小定理得(b/a)%p=(ba^(p-2))%p,对应到本题上来,(n^m-1)/(n^m)%p=((n^m-1)(n^m)^(p-2))%p
这样看公式实在别扭,还是写一下吧。
图片说明

知识点详解

之前小白月赛25的D题与这个十分类似,而且当时写的特别详细,所以这次就不写了,直接给大家链接了。
小白月赛25D题
【模板】有理数取余(小白版)

AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll read(){//快读板子
    ll f=1;
    ll x=0;
    char ch;
    ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch<='9'&&ch>='0'){
        x=(x<<3)+(x<<1)+ch-'0';
        ch=getchar();
    }
    return f*x;
}
ll ksm(ll x,ll n){//快速幂板子
    ll ans=1;
    while(n>0){
        if(n&1LL) ans=ans*x%mod;
        x=x*x%mod;
        n>>=1;
    }
    return ans%mod;
}
int main(){
    ll t,m,n;
    t=read();
    while(t--){
        n=read();
        m=read();
                //核心代码
        ll tmp=ksm(n,m);
        cout<<((tmp-1)*ksm(tmp,mod-2))%mod<<endl;
    }    
} 

自我总结

系统地做过一次了,这次做的时候还是忘记了,WTCL QAQ