• 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;
    }
    
  • 相关阅读:
    线程池
    多线程随笔
    注解随笔
    反射机制
    iO流
    FastDFS+docker建立分布式文件系统
    Java之Exception
    Java之String
    手写SpringMvc
    spring中一些常用注解的含义
  • 原文地址:https://www.cnblogs.com/pblr/p/4713544.html
Copyright © 2020-2023  润新知