Key Set
soda has a set S with n integers {1,2,…,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.
The first line contains an integer n (1≤n≤109)
4 1 2 3 4
0 1 3 7
博主对这样例 找了下规律就找到了qaq
证明 :解题思路:因为集合S中的元素是从1开始的连续的自然数,所以所有元素中奇数个数与偶数个数相同,或比偶数多一个。另外我们要知道偶数+偶数=偶数,奇数+奇数=偶数,假设现在有a个偶数,b个奇数,则
根据二项式展开公式
以及二项式展开式中奇数项系数之和等于偶数项系数之和的定理
可以得到上式
最后的结果还需减去
即空集的情况,因为题目要求非空子集
所以最终结果为
#include<stdio.h> #define N 1000000007 #define LL long long LL powMod(LL a, LL b, LL c) { LL ans = 1; while(b){ if(b&1) ans = (ans*a) % c; a = (a*a) % c; b /= 2; } return ans; } int main() { int T; scanf("%d",&T); while(T--){ LL a; scanf("%lld",&a); printf("%lld\n",powMod(2,a-1,N)-1); } return 0; }