不管怎么卡,时间都不变。。。
#include<iostream>
#define ll long long
using namespace std;
ll mod,T;
const ll N=1e5+1;
ll f[N];
ll pmu[N];
ll mu[N];
ll p[N];
ll prime[N/10+1],cnt;
ll Inv[N];
ll pmuT[N];
ll xx[N];
ll phi[N];
inline int min(int a,int b){
return a*(a<b)+b*(a>=b);
}
inline int qpmod(int a,int b,int p){
if(b==-1) return qpmod(a,p-2,p);
ll ans=1;
while(b){
if(b&1) ans=1ll*ans*a%p;
b>>=1;
a=1ll*a*a%p;
}
return ans;
}
inline int inv(ll n){
return qpmod(n,mod-2,mod);
}
inline ll sum1(ll n){
return n*(n+1)/2;
}
inline void prework(){
pmu[0]=1;
xx[0]=1;
phi[1]=1;
register ll i,j;
for(i=1;i<N;++i){
pmu[i]=1;
Inv[i]=inv(i);
xx[i]=qpmod(i,i,mod);
}
mu[1]=1;
for(i=2;i<N;++i){
if(p[i]==0){
prime[++cnt]=i;
mu[i]=-1;
phi[i]=i-1;
}
for(j=1;j<=cnt&&i*prime[j]<N;++j){
p[i*prime[j]]=1;
if(i%prime[j]==0){
mu[i*prime[j]]=0;
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
mu[i*prime[j]]=-mu[i];
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(i=1;i<N;++i){
for(j=i;j<N;j+=i){
pmu[j]=pmu[j]*qpmod(i,mu[j/i],mod)%mod;
}
}
pmuT[0]=1;
for(i=1;i<N;++i) pmuT[i]=qpmod(pmu[i],i*i%(mod-1),mod);
for(i=1;i<N;++i) pmuT[i]=pmuT[i-1]*pmuT[i]%mod;
for(i=1;i<N;++i) pmu[i]=pmu[i]*pmu[i-1]%mod;
for(i=1;i<N;++i) xx[i]=xx[i-1]*xx[i]%mod;
f[0]=1;
for(i=1;i<N;++i) f[i]=f[i-1]*i%mod;
for(i=1;i<N;++i) phi[i]+=phi[i-1];
}
inline int calc1(int A,int B,int C){
return qpmod(f[A],B*C%(mod-1),mod);
}
inline int calc2(int A,int B,int C){
int sum=1,r;
for(register int l=1;l<=A&&l<=B;++l){
r=min(A/(A/l),B/(B/l));
sum=sum*1ll*qpmod(pmu[r]*inv(pmu[l-1])%mod,(A/l)*(B/l)%(mod-1),mod)%mod;
l=r;
}
return qpmod(sum,C,mod);
}
inline int calc3(int A,int B,int C){
return qpmod(xx[A],sum1(B)%(mod-1)*sum1(C)%(mod-1),mod);
}
inline int calc4(int A,int B,int C){
int sum=1,r;
for(register int l=1;l<=A&&l<=B;++l){
r=min(A/(A/l),B/(B/l));
sum=sum*1ll*qpmod(pmuT[r]*inv(pmuT[l-1])%mod,sum1(A/l)%(mod-1)*sum1(B/l)%(mod-1),mod)%mod;
l=r;
}
return qpmod(sum,sum1(C)%(mod-1),mod);
}
inline int calc5(int A,int B,int C){
int sum=1,r;
for(register int l=1;l<=A&&l<=B&&l<=C;++l){
r=min(min(A/(A/l),B/(B/l)),C/(C/l));
sum=sum*1ll*qpmod(qpmod(f[A/l],(B/l)*(C/l)%(mod-1),mod),(phi[r]-phi[l-1])%(mod-1),mod)%mod;
l=r;
}
return sum;
}
inline int calc(int A,int B){
int sum=1,r;
for(register int l=1;l<=A&&l<=B;++l){
r=min(A/(A/l),B/(B/l));
sum=sum*1ll*qpmod(pmu[r]*inv(pmu[l-1])%mod,(A/l)*(B/l)%(mod-1),mod)%mod;
l=r;
}
return sum;
}
inline int calc6(int A,int B,int C){
int sum=1,r;
for(register int l=1;l<=A&&l<=B&&l<=C;++l){
r=min(min(A/(A/l),B/(B/l)),C/(C/l));
sum=sum*1ll*qpmod(calc(A/l,B/l),(phi[r]-phi[l-1])%(mod-1)*(C/l)%(mod-1),mod)%mod;
l=r;
}
return sum;
}
int main(){
cin>>T>>mod;
prework();
while(T--){
int A,B,C;
cin>>A>>B>>C;
cout<<1ll*calc1(A,B,C)*calc1(B,A,C)%mod*inv(calc2(A,B,C))%mod*inv(calc2(A,C,B))%mod<<' '<<1ll*calc3(A,B,C)*calc3(B,A,C)%mod*inv(calc4(A,B,C))%mod*inv(calc4(A,C,B))%mod<<' '<<1ll*calc5(A,B,C)*calc5(B,A,C)%mod*inv(calc6(A,B,C))%mod*inv(calc6(A,C,B))%mod<<endl;
}
}