Description
函数F(x,y)满足:
给出n,m,求F(m,1)%1e9+7
Input
第一行一整数T表示用例组数,每组用例输入两个整数n,m (1<=T<=1e4,1<=n,m < 2^63)
Output
对于每组用例,输出F(m,1)%1e9+7
Sample Input
2
2 2
3 3
Sample Output
2
33
Solution
Code
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod=1000000007,inv3=333333336;
int T;
ll n,m;
int mod_pow(int a,int b)
{
int ans=1;
while(b)
{
if(b&1)ans=(ll)ans*a%mod;
a=(ll)a*a%mod;
b>>=1;
}
return ans;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%I64d%I64d",&n,&m);
if(m==1)
{
printf("1\n");
continue;
}
int ans=0;
int a=mod_pow(2,n%(mod-1))-1;
ans=(ans+2ll*mod_pow(a,(m-1)%(mod-1)))%mod;
if(n&1)ans++;
if(ans>=mod)ans-=mod;
ans=(ll)ans*inv3%mod;
printf("%d\n",ans);
}
return 0;
}