Give a set S, |S| = n, then how many ordered set group (S1, S2, ..., Sk) satisfies S1 ∩ S2 ∩ ... ∩ Sk = ∅. (Si is a subset of S, (1 <= i <= k))
Input
The input contains multiple cases, each case have 2 integers in one line represent n and k(1 <= k <= n <= 231-1), proceed to the end of the file.
Output
Output the total number mod 1000000007.
Sample Input
1 1 2 2
Sample Output
1 9
Author: QU, Zhe
Contest: ZOJ Monthly, October 2011
解题报告: 求无交集的子集数,即总情况数减去有交集的子集数。
易知,2^n^k - C(n, 1)*2^(n-1)^k + C(n, 2)*2^(n-2)^k ... C(n, n)*2^(n-n)^k 即为答案。可化简为(2^k - 1)^n。
两次快速幂,即为解。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int mod = 1000000007;
int powMod(LL a,int b)
{
LL res=1;
while(b)
{
if(b&1)
res = (res*a)%mod;
b >>= 1;
a = (a*a)%mod;
}
return res;
}
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
printf("%d\n", powMod((powMod(2, k)-1+mod)%mod, n));
}