是的,这是个数学题。推导的题。
以下证明来自luoyijie聚聚
由概率和为1得
令d为p的差分数组,即
令
则,而
所以你就可以直接算了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int x,y,z,n,a,b;
const int mod=1e9+7;
int ksm(int a,int b){
int sum=1;
while(b){
if(b&1)sum=sum*a%mod;a=a*a%mod;b>>=1;
}return sum;
}
signed main(){
cin>>n>>a>>b;
x=(b-a*b%mod+mod)%mod;
y=(2*a%mod*b%mod-a-b+2*mod+1)%mod;
z=(a-a*b%mod+mod)%mod;
int k=x*ksm(z,mod-2)%mod;
int gu=ksm(k,n)-1;(gu+=mod)%=mod;
int ri=ksm(k,2*n)-1;(ri+=mod)%=mod;
ri=ksm(ri,mod-2);
gu=gu*ri%mod;
cout<<gu;
return 0;
}