zoukankan      html  css  js  c++  java
  • hdu 5363 Key Set 快速幂

    Problem Description
    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.
     
    Input
    There are multiple test cases. The first line of input contains an integer T (1T105), indicating the number of test cases. For each test case:

    The first line contains an integer n (1n109), 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,表示一个集合中有n个数1-n;找出这个集合的非空子集的个数,并且这些非空子集中所有元素相加为偶数。
           大家都知道n个数的非空子集有2的n次方减1个,那么给原集合中1剔除来,剩下的集合就有2的n-1次方-1个。那么剩下的集合中所有元素相加之和为奇数的加上1就为偶数了,剩下为偶数的就不加1.所以结果就是2的n次方-1。由于这个数据非常大,就要用快速幂。
         快速幂的作用:减少计算时间。在计算中就可以取摸。取摸原理假设 m=x*y;那么 m%n=((x%n)*(y%n))%n;
     
       
    #include<cstdio>
    #include<cstring>
    using namespace std;
    long long t,n,ans,y;
    int f()
    {
        ans=1;
        y=2;;
        n-=1;
        while (n)
        {
            if (n&1) ans=(ans*y)%1000000007;
            y=(y*y)%1000000007;
            n>>=1;
        }
        return ans-1;
    }
    int main()
    {
        scanf("%lld",&t);
        while (t--)
        {
            scanf("%lld",&n);
            printf("%lld
    ",f());
        }
        return 0;
    }
    
  • 相关阅读:
    Ionic开发Hybrid App问题总结
    >>> 主页链接
    微信小程序之WebSocket
    Keepalived+LVS+nginx搭建nginx高可用集群
    centos7 dns(bind)安装配置
    samba安装配置
    redis数据备份还原
    gitlab部署
    gitlab数据迁移
    kubeadm部署一个Kubernetes集群
  • 原文地址:https://www.cnblogs.com/pblr/p/4713544.html
Copyright © 2011-2022 走看看