B. AND 0, Sum Big
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Baby Badawy's first words were "AND 0 SUM BIG", so he decided to solve the following problem. Given two integers nn and kk, count the number of arrays of length nn such that:
Since the answer can be very large, print its remainder when divided by 109+7109+7.
Input
The first line contains an integer tt (1≤t≤101≤t≤10) — the number of test cases you need to solve.
Each test case consists of a line containing two integers nn and kk (1≤n≤1051≤n≤105, 1≤k≤201≤k≤20).
Output
For each test case, print the number of arrays satisfying the conditions. Since the answer can be very large, print its remainder when divided by 109+7109+7.
Example
input
Copy
2 2 2 100000 20
output
Copy
4 226732710
Note
In the first example, the 44 arrays are:
==================================================================================================================================================
&运算要求只要有一个是0结果一定是0,而我们如果想让结果最大,最好的方法当然是n个2^k-1,但这样与运算之后并不是0,。我们可以让n-1个数字全是2^k-1,剩下一个0,也就是k位都是0的情况。然而这k个位置是0的情况随机分配在n个数字是并不影响答案的大小的,故答案方案数就是n^k,快速幂解决即可
- # include<iostream>
- # define mod 1000000007
- using namespace std;
-
- typedef long long int ll;
-
-
- ll quickpow(ll base, ll pow)
- {
-
- ll ans=1;
-
- while(pow)
- {
-
- if(pow&1)
- ans=ans*base%mod;
-
-
- pow>>=1;
-
- base=base*base%mod;
-
-
- }
-
- return ans;
-
- }
- int main ()
- {
-
- int t;
-
- cin>>t;
-
-
- while(t--)
- {
- ll n,k;
-
- cin>>n>>k;
-
-
- cout<<quickpow(n,k)<<endl;
-
- }
- return 0;
-
- }