题:https://ac.nowcoder.com/acm/contest/634/D
求4的n次方减一
借个大佬的图
#include<iostream>
#define ll long long
using namespace std;
ll er(ll n){//前n个数中与n互质的个数
ll ans=n;
ll i;
for(i=2;i*i<=n;i++){
if(n%i==0){
ans-=ans/i;
while(n%i==0) n/=i;
}
}
if(n>1) ans-=ans/n;
return ans;
}
ll qpow(ll a,ll b,ll c){//快速幂
ll ans=1;
while(b){
if(b&1){
ans=(ans*a)%c;
}
a=a%c*a%c;
b>>=1;
}
return ans;
}
int main(){
int T;
cin>>T;
while(T--){
string a;
ll mod;
cin>>a>>mod;
ll k=mod;
k=er(mod);
ll n=0;
for(int i=0;i<a.size();i++){
n=n*10+a[i]-'0';
n%=k;
}
ll ant=(qpow(4,n+k,mod)-1+mod)%mod;
cout<<ant<<endl;
}
return 0;
}