这题容易发现结果为 mod p, 难点在于n的数据太大,所以要先对 n-1 进行降幂处理
用到一个降幂公式( 因为1000000007是素数,且与2互质,所以可以用此公式 )
只要把降幂公式中的 n 换成 n-1就行
(n-1) %( p-1) = n%p -1
所以只要对n取模再 -1,然后用快速幂
不过n太大,不能用 long long ,用string存储就可以。
举个例子:123
0*10+1=1,1*10+2=12 ,12*10+3=123
#include<iostream>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll qmod (ll a,ll b){
ll ans=1;
ll t=a;
while(b){
if(b&1) ans=ans*t%mod;
t=t*t%mod;
b>>=1;
}
return ans%mod;
}
int main(){
ll t;
cin>>t;
while(t--){
string s;
cin>>s;
ll n=0;
for(int i=0;i<s.length();i++){
n=(n*10+s[i]-'0')%(mod-1);每次取模防止溢出
}
n--;
cout<<1ll*qmod(2,n)<<endl;
}
return 0;
}