有一个神奇的公式叫做二项式展开公式:,所以c(n,0)+c(n,1)+c(n,2)+........+c(n,n)=(1+1)^n=2^n,二项式展开公式有个神奇的性质:奇数项之和等于偶数项之和,所以假设1~n中有a个奇数,b个偶数,那么答案的个数即为(2^a*(2^b)/2)-1=2^(n-1)-1。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cmath>
#define N 2005
#define M 1000005
#define LL long long
#define mod 1000000007
#define INF 0x3f3f3f3f
using namespace std;
int n;
LL ppow(LL a, LL b){
LL c = 1;
while (b){
if (b & 1)c = c*a%mod;
b >>= 1;
a = a*a%mod;
}
return c;
}
int main(){
int t;
cin >> t;
while (t--){
scanf("%d", &n);
LL ans = ppow(2, n - 1);
ans--;
cout << ans << endl;
}
return 0;
}