题目链接:Coin
题目大意:有一个特殊的硬币,正面朝上的概率是q/p,现在投掷k次,问出现偶数次正面朝上的概率是多少,需要算逆元
题目思路:我们可以整理得到我们需要算的是
C(k,n)∗(qp)k∗(1−q/p)k−n
对于所有的偶数n,我们假定去加上奇数,也就是
∑nn=0C(k,n)∗(qp)k∗(1−qp)k−n=(qp+1−qp)k=1
但是我们需要的是偶数次,所以我们得减掉奇数,所以我们把后面的
1−qp
取反,然后两者相加再除二,这个用二项式定理可以很轻易的得到,得到一个式子
(p−2qp)k2
然后套公式就好了
#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
ll quick_mod(ll a,ll b,ll mod)
{
ll ans = 1;
while(b)
{
if(b&1)
ans = (ans*a)%mod;
a = (a*a)%mod;
b >>= 1;
}
return ans;
}
int main(){
ll T,p,q,k;
scanf("%lld",&T);
while(T--){
scanf("%lld%lld%lld",&p,&q,&k);
ll ans1 = quick_mod(p-2*q,k,mod);
ll ans2 = quick_mod(p,k,mod);
ll ans = (ans1*quick_mod(ans2,mod-2,mod)+1)%mod;
ans = ans*quick_mod(2,mod-2,mod);
printf("%lld\n",(ans+mod)%mod);
}
return 0;
}