要求从1~n中所有数组成的各子集中,子集元素和为偶数的个数
考虑:
1、两个奇数可以组成一个偶数
2、集合中元素不存在重复
3、注意去掉空集
最后推出的结果是2^(n-1)-1
数据量大这里需要用到快速幂。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int T, n;
const int mod = 1000000007;
typedef long long ll;
ll quickPower (int a, int b, int mod)
{
ll ans = 1;
ll aBin = a;
while(b > 0)
{
if(b & 1) ans = ans * aBin % mod;
b >>= 1;
aBin = aBin * aBin %mod;
}
return ans;
}
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("%d\n", quickPower(2, n-1, mod)-1);
}
return 0;
}