题目链接
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