MtOI2019 幽灵乐团

我来吃屎了,哈哈啊哈哈哈啊哈哈啊哈!!!!!!!!!

发现对于题目要求的式子:

\[\dfrac{\text{lcm}(i,j)}{\gcd(i,k)}=\dfrac{i\times j\div\gcd(i,j)}{\gcd(i,k)}=\dfrac{i\times j}{\gcd(i,k)\times \gcd(i,j)} \]

那么考虑把这个式子剥离开,得到:

\[\left\{\begin{matrix}P_1=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C i^{f(type)} \\P_2=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C j^{f(type)} \\P_3=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C\gcd(i,j)^{f(type)} \\P_4=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\prod\limits_{k=1}^C \gcd(i,k)^{f(type)} \\ans=\dfrac{P_1\times P_2}{P_3\times P_4}\end{matrix}\right. \]

\(type=0\)

先简化 \(P_1,P_2\)

\[\left\{\begin{matrix}P_1=(\prod\limits_{i=1}^A i)^{B\times C}= (A!)^{B\times C}\\P_2=(\prod\limits_{j=1}^B)^A\times C{=(B!)^{A\times C}}\end{matrix}\right. \]

容易想到:

\[\prod\limits_{i=1}^{A}\prod\limits_{j=1}^B\gcd(i,j)=\prod\limits_{d=1}^Ad^{\sum _{i=1}^a\sum_{j=1}^b[\gcd(i,j)=d]}\]

考虑怎么把指数上的式子反演掉,设:

\[f(n)=\sum\limits_{i=1}^a\sum\limits_{j=1}^b[\gcd(i,j)=n] \]

\[F(n)=\sum\limits_{n\mid k}f(k)=\lfloor\dfrac{a}{n}\rfloor\times \lfloor\dfrac{b}{n}\rfloor \]

对于 \(F(n)\),容易理解如果 \(gcd(i,j)\mid n\),那么 \(i\mid n\)\(j\mid n\)

因为 \([1,a]\) 中有 \(\lfloor\dfrac{a}{n}\rfloor\) 个,\([1,b]\) 中有 \(\lfloor\dfrac{b}{n}\rfloor\) 个且两两组合都可以,所以 \(F(n)=\lfloor\dfrac{a}{n}\rfloor\times \lfloor\dfrac{b}{n}\rfloor\)

那么对这个式子进行莫比乌斯反演,得到:

\[f(n)=\sum\limits_{n\mid k}\mu(\dfrac{k}{n})\times F(k) \]

\(t=\lfloor\dfrac{k}{d}\rfloor\),那么就有:

\[f(d)=\sum\limits_{t=1}^{\min(\lfloor\frac{a}{d}\rfloor,\lfloor\frac{b}{d}\rfloor)} \mu (t)\times \lfloor\dfrac{a}{td}\rfloor\times \lfloor\dfrac{b}{td}\rfloor \]

也就是:

\[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[\gcd(i,j)=d]=\sum\limits_{t=1}^{\min(\lfloor\frac{a}{d}\rfloor,\lfloor\frac{b}{d}\rfloor)} \mu (t)\times \lfloor\dfrac{a}{td}\rfloor\times \lfloor\dfrac{b}{td}\rfloor \]

发现就是「HAOI2011」Problem b。

带回原式,得到:

\[\prod\limits_{i=1}^Ad^{\sum\limits_{t=1}^{\min(\lfloor\frac{a}{d}\rfloor,\lfloor\frac{b}{d}\rfloor)} \mu (t)\times \lfloor\dfrac{a}{td}\rfloor\times \lfloor\dfrac{b}{td}\rfloor} \]

\(T=dt\),把 \(td\) 一样的放在一起考虑,得到:

\[\prod\limits_{T}^{\min(A,B)}(\prod\limits_{d\mid T} d^{\mu(T/d)})^{\frac{A}{T}\times \frac{B}{T}} \]

枚举 \(d\),找到 \(T\) 把答案加上去,最后算次方再乘起来,时间复杂度为 \(O(n\log n)\)

\(type=1\)

考虑怎么求解:

\[\prod\limits_{i=1}^{A}\prod\limits_{j=1}^B\prod\limits_{k=1}^C i^{i\times j\times k} \]

把后面提出来,得到:

\[\prod\limits_{i=1}^A i^{\dfrac{j\times (j-1)\times k\times (k-1)}{4}} \]

需要用欧拉降幂。

考虑后面怎么推:

\[\prod\limits_{i=1}^{A}\prod\limits_{j=1}^B\prod\limits_{k=1}^C \gcd(i,j)^{i\times j\times k} \]

\(\prod\limits_{k=1}^C\) 拿出来,得到:

\[(\prod\limits_{i=1}^A\prod\limits_{j=1}^B \gcd(i,j)^{i\times j})^{\dfrac{k\times(k+1)}{2}} \]

类似于 \(type=0\) 的时候,我们可以发反演得到:

\[\prod\limits_{T=1}^{\min(A,B)}(\prod\limits_{d\mid T} d^{\mu(T/d)})^{T^2\times S(A/T)\times S(B/T)} \]

其中 \(S(x)=\dfrac{x\times(x-1)}{2}\)

\(type=2\)

对于指数的情况,直接开 \(\log\)

得到:

\[\sum\limits_{i=1}^A\sum\limits_{j=1}^B\sum\limits_{k=1}^C\gcd(i,j,k)\times \ln(\dfrac{\text{lcm}(i,j)}{\gcd(i,k)}) \]

考虑证明一下,有欧拉反演:

\[n=\sum\limits_{d\mid n}\varphi(d) \]

那么:

\[\gcd(i,j,k)=\sum\limits_{d\mid \gcd(i,j,k)} \varphi(d) \]

带入,得到:

\[\sum\limits_{i=1}^A\sum\limits_{j=1}^B\sum\limits_{k=1}^C\sum\limits_{d\mid \gcd(i,j,k)} \varphi(d)\times \ln(\dfrac{\text{lcm}(i,j)}{\gcd(i,k)}) \]

\(i\gets di,j\gets dj,k\gets dk\),得到:

\[\sum\limits_{d=1}^{\min(A,B,C)}\sum\limits_{i=1}^\frac{A}{d}\sum\limits_{j=1}^{\frac{B}{d}}\sum\limits_{k=1}^{\frac{C}{d}} \varphi(d)\times \ln(\dfrac{\text{lcm}(id,jd)}{\gcd(id,kd)} \]

\(\varphi(d)\) 拿出来,得到:

\[\sum\limits_{d=1}^{\min(A,B,C)}\varphi(d)\sum\limits_{i=1}^\frac{A}{d}\sum\limits_{j=1}^{\frac{B}{d}}\sum\limits_{k=1}^{\frac{C}{d}} \ln(\dfrac{\text{lcm}(id,jd)}{\gcd(id,kd)} \]

把后面的 \(d\) 消了:

\[\sum\limits_{d=1}^{\min(A,B,C)}\varphi(d)\sum\limits_{i=1}^\frac{A}{d}\sum\limits_{j=1}^{\frac{B}{d}}\sum\limits_{k=1}^{\frac{C}{d}} \ln(\dfrac{\text{lcm}(i,j)}{\gcd(i,k)} \]

那么整体把 \(\ln\) 拿掉得到:

\[\prod\limits_{d=1}^{\min(A,B,C)}(\prod\limits_{i=1}^\frac{A}{d}\prod\limits_{j=1}^{\frac{B}{d}}\prod\limits_{k=1}^{\frac{C}{d}} \dfrac{\text{lcm}(i,j)}{\gcd(i,k)})^{\varphi(d)} \]

发现里面就是 \(type=0\) 的情况,做完了。

实现

一些数组的意义:

\[f_1(n)=\prod\limits_{T=1}^n\prod\limits_{i\mid T}i^{\mu (\frac{T}{i})} \]

\[f_2(n)=\prod\limits_{T=1}^n(\prod\limits_{i\mid T}i^{\mu(\frac{T}{i})})^{T^2} \]

\[phi(n)=\sum\limits_{i=1}^n \varphi(i) \]

\[F(A,B)=\prod\limits_{T=1}^{\min(A,B)}(\prod\limits_{d\mid T} d^{\mu(T/d)})^{S(A/T)\times S(B/T)} \]

\[G(A,B)=\prod\limits_{T=1}^{\min(A,B)}(\prod\limits_{d\mid T} d^{\mu(T/d)})^{T^2\times S(A/T)\times S(B/T)} \]

/*
https://www.cnblogs.com/liudagou/p/18686280
_______________#########_______________________
______________############_____________________
______________#############____________________
_____________##__###########___________________
____________###__######_#####__________________
____________###_#######___####_________________
___________###__##########_####________________
__________####__###########_####_______________
________#####___###########__#####_____________
_______######___###_########___#####___________
_______#####___###___########___######_________
______######___###__###########___######_______
_____######___####_##############__######______
____#######__#####################_#######_____
____#######__##############################____
___#######__######_#################_#######___
___#######__######_######_#########___######___
___#######____##__######___######_____######___
___#######________######____#####_____#####____
____######________#####_____#####_____####_____
_____#####________####______#####_____###______
______#####______;###________###______#________
________##_______####________####______________
*/
#include<iostream>
#include<bitset>
#include<algorithm>
#define int long long
using namespace std;
const int N=1e5+5;
int T,A,B,C,p,jc[N],I[N],mu[N],phi[N],pri[N],tot,invf1[N],invf2[N],f1[N],f2[N];
int P(int a,int b){
	int ans=1;
	while(b){
		if(b&1) ans=ans*a%p;
		a=a*a%p,b>>=1;
	}
	return ans;
}
bitset<N>vis;
void init(){
	jc[0]=I[0]=1;
	for(int i=1;i<N;i++){
		jc[i]=jc[i-1]*i%p;
		I[i]=I[i-1]*P(i,i)%p;
	}
	mu[1]=phi[1]=1;
	for(int i=2;i<N;i++){
		if(!vis[i]){
			pri[++tot]=i,mu[i]=-1,phi[i]=i-1;
		}
		for(int j=1;j<=tot&&i*pri[j]<N;j++){
			vis[i*pri[j]]=1;
			if(!(i%pri[j])){
				mu[i*pri[j]]=0;
				phi[i*pri[j]]=phi[i]*pri[j];
				break;
			}
			mu[i*pri[j]]=-mu[i];
			phi[i*pri[j]]=phi[i]*phi[pri[j]];
		}
	}
	for(int i=0;i<N;i++){
		f1[i]=1,phi[i]+=phi[i-1];
	}
	for(int i=1;i<N;i++) for(int j=i;j<N;j+=i){
		f1[j]=f1[j]*P(i,(p-1+mu[j/i])%(p-1))%p;
	}
	for(int i=0;i<N;i++){
		f2[i]=P(f1[i],i*i%(p-1));
	}
	invf1[0]=invf2[0]=1;
	for(int i=1;i<N;i++){
		f1[i]=f1[i]*f1[i-1]%p,invf1[i]=P(f1[i],p-2);
		f2[i]=f2[i]*f2[i-1]%p,invf2[i]=P(f2[i],p-2);
	}
}
int S(int x){
	return x*(x+1)/2%(p-1);
}
int F(int A,int B){
	int ans=1;
	for(int L=1,R;L<=min(A,B);L=R+1){
		int Aa=A/L,Bb=B/L;
		R=min(A/Aa,B/Bb);
		ans=ans*P(f1[R]*invf1[L-1]%p,Aa*Bb%(p-1))%p;
	}
	return ans;
}
int G(int A,int B){
	int ans=1;
	for(int L=1,R;L<=min(A,B);L=R+1){
		R=min(A/(A/L),B/(B/L));
		ans=ans*P(f2[R]*invf2[L-1]%p,S(A/L)*S(B/L)%(p-1))%p;
	}
	return ans;
}
int s1(int A,int B,int C){
	return P(jc[A],B*C%(p-1))*P(jc[B],A*C%(p-1))%p*P(P(F(A,B),C)*P(F(A,C),B)%p,p-2)%p;
}
int s2(){
	return P(P(I[A],S(B))*P(I[B],S(A))%p,S(C))*P(P(G(A,B),S(C))*P(G(A,C),S(B))%p,p-2)%p;
}
int s3(){
	int ans=1;
	for(int L=1,R;L<=min({A,B,C});L=R+1){
		R=min({A/(A/L),B/(B/L),C/(C/L)});
		ans=ans*P(s1(A/L,B/L,C/L),(phi[R]-phi[L-1])%(p-1))%p;
	}
	return ans;
}
void solve(){
	cin>>A>>B>>C;
	cout<<s1(A,B,C)<<' '<<s2()<<' '<<s3()<<'\n';
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>T>>p,init();
	while(T--) solve();
	return 0;
}
posted @ 2025-01-22 16:07  明天动手  阅读(46)  评论(0)    收藏  举报