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 (1≤T≤105), indicating the number of test cases. For each test case:

The first line contains an integer n (1≤n≤109), 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

普通函数

可以用普通快速幂函数来写,

#include<iostream>

using namespace std;
#define mod 1000000007
typedef long long ll;

ll ppow(ll x, ll n)
{
	ll result = 1;
	for (;n; n >>= 1)
	{
		if (n & 1)
		{
			result *= x;
			result %= mod;
		}
		x *= x;
		x %= mod;
	}
	return result;
}

int main()
{
	int t;
	ll n, x;
	scanf_s("%d", &t);
	while (t--)
	{
		scanf_s("%lld", &n);
		printf("%lld\n", ppow(2, n - 1) - 1);
	}
	return 0;
}

递归公式

#include<iostream>

using namespace std;
#define mod 1000000007
typedef long long ll;

ll powmod(ll x, ll n)
{
	if (!n)
		return 1;
	if (n & 1)
		return x * powmod(x * x % mod, n >> 1) % mod;
	return powmod(x * x % mod, n >> 1) % mod;
}


int main()
{
	int t;
	ll n, x;
	scanf_s("%d", &t);
	while (t--)
	{
		scanf_s("%lld", &n);
		printf("%lld\n", powmod(2, n - 1) - 1);
	}
	return 0;
}

快速幂公式

(1).x是奇数
xn =(x2%mod)n/2%mod;
(2)x是偶数
xn =((x2%mod)n/2*x)%mod;

发布了40 篇原创文章 · 获赞 0 · 访问量 1647
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览