2015-多校-6-1011-Key Set-快次幂

13 篇文章 0 订阅
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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值