Problem Description
soda has a set $S$ with $n$ integers $\{1, 2, \dots, n\}$. A set is called key set if the sum of integers in the set is an even number. He wants to know how many nonempty subsets of $S$ are key set.
Input
There are multiple test cases. The first line of input contains an integer $T$ $(1 \le T \le 10^5)$, indicating the number of test cases. For each test case: The first line contains an integer $n$ $(1 \le n \le 10^9)$, the number of integers in the set.
Output
For each test case, output the number of key sets modulo 1000000007.
Sample Input
4 1 2 3 4
Sample Output
0 1 3 7
题意: 给你一个数n,让你把里面的和为偶数的集合的个数找出来,规律是2^(n-1)-1,因为n的数值太大了,就是一个快次幂的运算,在做题中发现一个小规律,就是每一个n的集合里面,偶数和的集合数总是比奇数次少1,
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MOD=1e9+7;
void solve(int n)
{
long long ans=1;
long long a=2;
while(n)
{
if(n&1)
{
ans=(ans%MOD*(a%MOD))%MOD;
printf("%d\n",ans);
}
a=(a%MOD*(a%MOD))%MOD;
n>>=1;
}
cout<<ans-1<<endl;
}
int main()
{
int n,t;
while(~scanf("%d",&t))
{
while(t--)
{
scanf("%d",&n);
solve(n-1);
}
}
return 0;
}