[2018 ACM-ICPC 焦作赛区网络赛] G - Give Candies
求 : 2 ^ (n-1)
利用欧拉降幂公式:
(a^b)%m=a^(b%phi(m))%m
#include<bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"----------"<<endl
typedef long long ll;
const int maxn = 1e5 + 10;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int N = 1010;
ll qkm(ll a, ll b, ll c = MOD){
ll s = 1; a %= c;
while(b){
if(b & 1)
s = s * 1ll * a % c;
b >>= 1;
a = a * 1ll * a % c;
}
return s;
}
int main(){
int T;
cin >> T;
while(T--){
string s;
cin >> s;
ll ans = 0;
for(ll i=0; s[i]; i++){
ans = ans * 10 + (s[i] - '0');
ans %= (MOD - 1);
}
ans = (ans - 1 + MOD -1) % (MOD - 1);//防止负数
ll cnt = qkm(2, ans-1, MOD);
printf("%lld\n", cnt);
}
return 0;
}