Bob has a not even coin, every time he tosses the coin, the probability that the coin's front face up is pq(pq≤21).
The question is, when Bob tosses the coin k times, what's the probability that the frequency of the coin facing up is even number.
If the answer is YX, because the answer could be extremely large, you only need to print (X∗Y−1)mod(109+7).
Input Format
First line an integer T, indicates the number of test cases (T≤100).
Then Each line has 3 integer p,q,k(1≤p,q,k≤107) indicates the i-th test case.
Output Format
For each test case, print an integer in a single line indicates the answer.
样例输入
2 2 1 1 3 1 2
样例输出
500000004 555555560
题目来源
题意:
投硬币,正面朝上是q/p的概率,求投k次,偶数次正面朝上的概率;
(a+b)^k=C(0,k)*a^0*b^k+C(1,k)*a^1*b^(k-1)+……+C(k,k)*a^k&b^0.
那么(a-b)^k+(a+b)^k=上面式子的偶数项合,即答案。
#include <iostream>
#include <stdio.h>
#include <stack>
#include <vector>
#include <math.h>
using namespace std;
#define LL long long
const LL mod = 1e9+7;
LL qkm(LL base,LL mi)
{
LL ans=1;
base%=mod;
while(mi)
{
if(mi&1) ans=ans*base%mod;
base=base*base%mod;
mi>>=1;
}
return ans;
}
int main()
{
LL T;
scanf("%lld",&T);
while(T--)
{
LL q,p,k;scanf("%lld %lld %lld",&p,&q,&k);
LL ans=(1+qkm((mod+1-2*q*qkm(p,mod-2)%mod),k)%mod)*qkm(2,mod-2)%mod;
printf("%lld\n",ans);
}
}