D. 田田的账号 2014新生暑假个人排位赛03
时间限制 1000 ms
内存限制 65536 KB
题目描述
田田申请了一个新的oj账号,打算取一个霸气而简单的名字。 什么叫简单呢?说白了田田脑子不好使,只能记住abcd这4个字母组成单词。 怎么叫霸气呢?田田认为a个个数一定要有奇数个,b的个数一定要有偶数个(包括0)才可以。 现在田田取了一个长为n的账号,但是由于田田的记性实在太差了,而把账号忘记了. 于是把这个问题交给了聪明的wzt,而他认为这道题太过于简单就把这道题交给了你 究竟这个账号有多少种可能?你只需得到这个结果模 10 9 +7 的值
输入格式
多组case,第一行为case数 T ,之后 T 行每行一个整数 n 。 1≤n≤10 9 , T≤100
输出格式
一个case对应一行输出
输入样例
2
1
2
输出样例
1
4
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
using namespace std;
int n,a[500],cnt;
int numa,numb;
long long power;
long long ans;
void quickpower(int x)
{
int k=x;
a[0]=0;
while(k>0)
{
a[++a[0]]=k%2;
k=k/2;
}
for(int i=a[0];i>=1;i--)
{
ans=ans%1000000007*ans%1000000007;
if(a[i]==1)ans=ans%1000000007*4%1000000007;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
power=4%1000000007;ans=1;
quickpower(n-1);
printf("%lld\n",ans);
}
return 0;
}