2017西安网络赛B_Coin_快速幂


样例输入

2
2 1 1
3 1 2

样例输出

500000004
555555560

思路:

n重伯努利实验概率分布题。
设q=1-p,p为事件概率。
Y为出现偶数次的概率。

2017西安网络赛B_Coin_#include_02

所以  Y=1/2*((1-2*p)^n+1)

先求快速幂,再求逆元

#include<bits/stdc++.h>
#define LL long long
#define mod 1000000007
using namespace std;
LL quick_pow(LL x, LL n) {
    LL res = 1;
    x=(x%mod+mod)%mod;
    while(n) {
        if(n&1)
            res=res*x% mod;
        n >>=1;
        x =x*x% mod;
    }
    return res;
}
int main()
{
    LL p, q;
    LL n;
    int t;
    scanf("%d", &t);
    while(t --) {
        scanf("%lld%lld%lld",&p, &q, &n);
        LL a=quick_pow(p,mod-2);
        a=(a*2*q)%mod;
        a=(1-a+mod)%mod;
        a=quick_pow(a,n)%mod;
        a=(a+1)%mod;
        LL b=quick_pow(2,mod-2)%mod;
        a=(a*b)%mod;
        printf("%lld\n", (a%mod+mod)%mod);
    }
}