C. Moamen and XOR
链接: link.
哎…至今不太懂为什么
n
,
m
n,m
n,m用
i
n
t
int
int是超时
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
long long Pow(long long a,long long b)
{
long long ans=1;
while(b){
if(b&1ll) ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=1ll;
}
return ans;
}
int main()
{
int t;
cin>>t;
long long n,k;
while(t--)
{
scanf("%lld %lld",&n,&k);
long long cnt=Pow(2ll,n-1);
if(n%2==0)
{
cnt=(cnt-1+mod)%mod;
}
if(n&1)
{
cnt=(cnt+1+mod)%mod;
}
long long ans=0;
ans=(ans+Pow(cnt,k))%mod;
if(n%2==0)
{
for(int i=1;i<=k;++i)
{
long long x=Pow(cnt,i-1)%mod;
long long y=Pow(2ll,(k-i)*n)%mod;
ans=(ans+x*y%mod)%mod;
}
}
printf("%lld\n",ans);
}
}