题目来源:点击这里
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll q_mul( ll a, ll b, ll mod ){
//快速乘
long long ans = 0;
while(b){
if(b & 1){
b--;
ans =(ans+ a)%mod;
}
b /= 2;
a = (a + a) % mod;
}
return ans;
}
ll fastpow(ll a,ll pow,ll mod){
ll base=a;
ll ans=1;
while(pow){
if(pow&1){
ans=q_mul(ans,base,mod);
}
base=q_mul(base,base,mod);
pow>>=1;
}
return (ll)ans;
}//快速幂板子
int main(){
int t;
scanf("%d",&t);
while(t--){
char s[100000+5];
ll phi=1;
ll m;
bool flag=false;
ll uis=0;
scanf("%s",s);
scanf("%lld",&m);
ll mm=m;//求pow(a,b)%m
for(ll i=2;i*i<=mm;++i){
if(mm%i) continue;
phi*=i-1;
mm/=i;
while(mm%i==0)
phi*=i,
mm/=i;
}
if (mm > 1) phi *= mm - 1;
for(ll i=0;i<strlen(s);++i){
uis=uis*10+(s[i]-'0');
if (uis >= phi) flag = 1, uis %= phi;
}
if (uis >= phi) flag = 1, uis %= phi;
if (flag) uis += phi;
printf("%lld\n",(fastpow(3,uis,m)-2+m)%m );
}
return 0;
}