【luogu P5518】[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演)

[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题

题目链接:luogu P5518

题目大意

\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}(\dfrac{\text{lcm}(i,j)}{\gcd(i,k)})^{f(type)}\)
多组数据,要你在 \(f(type)\) 分别是 \(1,i\times j\times k,\gcd(i,j,k)\) 的时候求式子的值。

思路

主要的思想是对于每个部分你就求两个东西:
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}i^{f(type)}\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\gcd(i,j)^{f(type)}\)

不多说了直接看我推导过程吧!
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}(\dfrac{\text{lcm}(i,j)}{\gcd(i,k)})^{f(type)}\)


\(\prod\limits_{i=1}^n\prod\limits_{j=1}^m\gcd(i,j)\)
\(\prod\limits_{d}d^{\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)==d]}\)

\(O(n\log n)\)


\(type=1\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\dfrac{\text{lcm}(i,j)}{\gcd(i,k)}\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)}\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\text{lcm}(i,j)\)
\((\prod\limits_{i=1}^{A}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)})^B(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\text{lcm}(i,j))^C\)
\((\prod\limits_{i=1}^{A}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)})^B(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\dfrac{ij}{\gcd(i,j)})^C\)
\((\prod\limits_{i=1}^{A}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)})^B(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\dfrac{1}{\gcd(i,j)})^C(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}ij)^C\)
\((\prod\limits_{i=1}^{A}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)})^B(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\dfrac{1}{\gcd(i,j)})^C((A!)^B(B!)^A )^C\)


\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\gcd(i,j)^{ij}\)
\(\prod\limits_{d}d^{\sum\limits_{i=1}^{A}\sum\limits_{j=1}^{B}[\gcd(i,j)==d](ij)}\)
\(\prod\limits_{d}d^{\sum\limits_{i=1}^{\left\lfloor\frac{A}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{B}{d}\right\rfloor}[\gcd(i,j)==1](idjd)}\)
\(\prod\limits_{d}d^{d^2d'^2\sum\limits_{d'}\mu(d')\sum\limits_{i=1}^{\left\lfloor\frac{A}{dd'}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor\frac{B}{dd'}\right\rfloor}(ij)}\)
\(\prod\limits_{d}d^{d^2d'^2\sum\limits_{d'}\mu(d')\sum\limits_{i=1}^{\left\lfloor\frac{A}{dd'}\right\rfloor}i\sum\limits_{j=1}^{\left\lfloor\frac{B}{dd'}\right\rfloor}j}\)
\(\prod\limits_{D}(\prod\limits_{d|D}d^{\mu(\left\lfloor\frac{D}{d}\right\rfloor)})^{D^2\sum\limits_{i=1}^{\left\lfloor\frac{A}{D}\right\rfloor}i\sum\limits_{j=1}^{\left\lfloor\frac{B}{D}\right\rfloor}j}\)

<--->
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\gcd(i,j)^{ijk}\)
\(\prod\limits_{k=1}^{C}(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\gcd(i,j)^{ij})^k\)
\((\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\gcd(i,j)^{ij})^{\sum\limits_{k=1}^{C}k}\)


\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}i^{ijk}\)
\(\prod\limits_{i=1}^{A}i^{i\sum\limits_{j=1}^B\sum\limits_{k=1}^Cjk}\)
\(\prod\limits_{i=1}^{A}i^{i(\sum\limits_{j=1}^Bj)(\sum\limits_{k=1}^Ck)}\)


\(type=1\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}(\dfrac{\text{lcm}(i,j)}{\gcd(i,k)})^{ijk}\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)^{ijk}}\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\text{lcm}(i,j)^{ijk}\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\dfrac{1}{\gcd(i,k)^{ijk}}\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}(\dfrac{ij}{\gcd(i,j)})^{ijk}\)


\(type=2\)

\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}i^{\gcd(i,j,k)}\)
\(\prod\limits_{d}\prod\limits_{i=1}^{A}i^{d\sum\limits_{j=1}^{B}\sum\limits_{k=1}^{C}[\gcd(i,j,k)==d]}\)
\(\prod\limits_{d}\prod\limits_{i=1}^{\left\lfloor \frac{A}{d}\right\rfloor}(id)^{d\sum\limits_{j=1}^{\left\lfloor \frac{B}{d}\right\rfloor}\sum\limits_{k=1}^{\left\lfloor \frac{C}{d}\right\rfloor}[\gcd(i,j,k)==1]}\)
\(\prod\limits_{d}\prod\limits_{i=1}^{\left\lfloor \frac{A}{d}\right\rfloor}(id)^{d\sum\limits_{j=1}^{\left\lfloor \frac{B}{d}\right\rfloor}\sum\limits_{k=1}^{\left\lfloor \frac{C}{d}\right\rfloor}[\gcd(i,j,k)==1]}\)
\(\prod\limits_{d}\prod\limits_{d'}\prod\limits_{i=1}^{\left\lfloor \frac{A}{dd'}\right\rfloor}(idd')^{d\mu(d')\left\lfloor \frac{B}{dd'}\right\rfloor\left\lfloor \frac{C}{dd'}\right\rfloor}\)
\(\prod\limits_{D}(\prod\limits_{d|D}\prod\limits_{i=1}^{\left\lfloor \frac{A}{D}\right\rfloor}(iD)^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)})^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}(\prod\limits_{d|D}(\prod\limits_{i=1}^{\left\lfloor \frac{A}{D}\right\rfloor}(i)^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)})(D^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)\left\lfloor\frac{A}{D}\right\rfloor}))^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{d|D}(\left\lfloor \frac{A}{D}\right\rfloor)!^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)}D^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)\left\lfloor\frac{A}{D}\right\rfloor}\right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{d|D}\left( (\left\lfloor \frac{A}{D}\right\rfloor)!D^{\left\lfloor\frac{A}{D}\right\rfloor}\right)^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)} \right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\left( (\left\lfloor \frac{A}{D}\right\rfloor)!D^{\left\lfloor\frac{A}{D}\right\rfloor}\right)^{\sum\limits_{d|D}d\mu(\left\lfloor\frac{D}{d}\right\rfloor)} \right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\left( (\left\lfloor \frac{A}{D}\right\rfloor)!D^{\left\lfloor\frac{A}{D}\right\rfloor}\right)^{\varphi(D)} \right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left((\left\lfloor \frac{A}{D}\right\rfloor)!^{\varphi(D)}\left(D^{\varphi(D)}\right)^{\left\lfloor\frac{A}{D}\right\rfloor} \right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\left(\prod\limits_{D}(\left\lfloor \frac{A}{D}\right\rfloor)!^{\varphi(D)}\right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\left(\prod\limits_{D}\left(D^{\varphi(D)}\right) \right)^{\left\lfloor\frac{A}{D}\right\rfloor\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
这里右边可以预处理来做。(不过后面我们可以消掉这个部分)


\(type=2\)
\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\gcd(i,j)^{\gcd(i,j,k)}\)
\(\prod\limits_{d}d^{(\sum\limits_{k=1}^{C}\gcd(d,k))(\sum\limits_{i=1}^{A}\sum\limits_{j=1}^{B}[\gcd(i,j)==d])}\)
\(\prod\limits_{d}d^{(\sum\limits_{k=1}^{C}\gcd(d,k))(\sum\limits_{i=1}^{\left\lfloor \frac{A}{d}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor \frac{B}{d}\right\rfloor}[\gcd(i,j)==1])}\)
\(\prod\limits_{d}d^{(\sum\limits_{k=1}^{C}\gcd(d,k))(\sum\limits_{d'}\mu(d')\left\lfloor \frac{A}{dd'}\right\rfloor\left\lfloor \frac{B}{dd'}\right\rfloor)}\)
\(\prod\limits_{D}\left(\prod\limits_{d|D}d^{\mu(\frac{D}{d})(\sum\limits_{k=1}^{C}\gcd(d,k))}\right)^{\left\lfloor \frac{A}{D}\right\rfloor\left\lfloor \frac{B}{D}\right\rfloor}\)
\(O(Tn\log n)\) 不太行常数大。

\(\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\prod\limits_{k=1}^{C}\gcd(i,j)^{\gcd(i,j,k)}\)
\(\prod\limits_{d}\prod\limits_{i=1}^{A}\prod\limits_{j=1}^{B}\gcd(i,j)^{d(\sum\limits_{k=1}^{C}[\gcd(i,j,k)==d])}\)
\(\prod\limits_{d}\prod\limits_{i=1}^{\left\lfloor \frac{A}{d}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{d}\right\rfloor}(d\gcd(i,j))^{d(\sum\limits_{k=1}^{\left\lfloor \frac{C}{d}\right\rfloor}[\gcd(i,j,k)==1])}\)
\(\prod\limits_{d}\prod\limits_{i=1}^{\left\lfloor \frac{A}{d}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{d}\right\rfloor}(d\gcd(i,j))^{d(\sum\limits_{k=1}^{\left\lfloor \frac{C}{d}\right\rfloor}[\gcd(i,j,k)==1])}\)
\(\prod\limits_{d}\prod\limits_{d'}\prod\limits_{i=1}^{\left\lfloor \frac{A}{dd'}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{dd'}\right\rfloor}(dd'\gcd(i,j))^{d\mu(d')\left\lfloor \frac{C}{dd'}\right\rfloor}\)
\((\prod\limits_{d}\prod\limits_{d'}\prod\limits_{i=1}^{\left\lfloor \frac{A}{dd'}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{dd'}\right\rfloor}\gcd(i,j)^{d\mu(d')\left\lfloor \frac{C}{dd'}\right\rfloor})(\prod\limits_{d}\prod\limits_{d'}dd'^{d\mu(d')\left\lfloor \frac{A}{dd'}\right\rfloor\left\lfloor \frac{B}{dd'}\right\rfloor\left\lfloor \frac{C}{dd'}\right\rfloor})\)
\((\prod\limits_{d}\prod\limits_{d'}\prod\limits_{i=1}^{\left\lfloor \frac{A}{dd'}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{dd'}\right\rfloor}\gcd(i,j)^{d\mu(d')\left\lfloor \frac{C}{dd'}\right\rfloor})(\prod\limits_{D}\prod\limits_{d|D}D^{d\mu(\left\lfloor\frac{D}{d}\right\rfloor)\left\lfloor \frac{A}{D}\right\rfloor\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor})\)
\((\prod\limits_{d}\prod\limits_{d'}\prod\limits_{i=1}^{\left\lfloor \frac{A}{dd'}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{dd'}\right\rfloor}\gcd(i,j)^{d\mu(d')\left\lfloor \frac{C}{dd'}\right\rfloor})(\prod\limits_{D}(D^{\varphi(D)})^{\left\lfloor \frac{A}{D}\right\rfloor\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor})\)

这个右边跟上面右边一样,一个是在上面贡献一个是在下面贡献,而且跟谁贡献无关,都是两个贡献,所以可以消掉。


\(type=2\)
\(\left(\prod\limits_{D}(\left\lfloor \frac{A}{D}\right\rfloor)!^{\varphi(D)}\right)^{\left\lfloor \frac{B}{D}\right\rfloor\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{d}\prod\limits_{d'}\prod\limits_{i=1}^{\left\lfloor \frac{A}{dd'}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{dd'}\right\rfloor}\gcd(i,j)^{d\mu(d')\left\lfloor \frac{C}{dd'}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{d|D}\prod\limits_{i=1}^{\left\lfloor \frac{A}{D}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{D}\right\rfloor}\gcd(i,j)^{d\mu(\frac{D}{d})}\right)^{\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{i=1}^{\left\lfloor \frac{A}{D}\right\rfloor}\prod\limits_{j=1}^{\left\lfloor \frac{B}{D}\right\rfloor}\gcd(i,j)^{\varphi(D)}\right)^{\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{t}t^{\left(\sum\limits_{i=1}^{\left\lfloor \frac{A}{D}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor \frac{B}{D}\right\rfloor}[\gcd(i,j)==t]\right)\varphi(D)}\right)^{\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{t}t^{\left(\sum\limits_{i=1}^{\left\lfloor \frac{A}{Dt}\right\rfloor}\sum\limits_{j=1}^{\left\lfloor \frac{B}{Dt}\right\rfloor}[\gcd(i,j)==1]\right)\varphi(D)}\right)^{\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{t}t^{\left(\sum\limits_{t'}\mu(t')\left\lfloor \frac{A}{Dtt'}\right\rfloor\left\lfloor \frac{B}{Dtt'}\right\rfloor\right)\varphi(D)}\right)^{\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{t}\prod\limits_{t'}t^{\mu(t')\left\lfloor \frac{A}{Dtt'}\right\rfloor\left\lfloor \frac{B}{Dtt'}\right\rfloor\varphi(D)}\right)^{\left\lfloor \frac{C}{D}\right\rfloor}\)
\(\prod\limits_{D}\left(\prod\limits_{T}\left(\prod\limits_{t|T}t^{\mu(\frac{T}{t})}\right)^{\left\lfloor \frac{A}{DT}\right\rfloor\left\lfloor \frac{B}{DT}\right\rfloor}\right)^{\left\lfloor \frac{C}{D}\right\rfloor\varphi(D)}\)
预处理最里面的括号里面的值,然后两次整除分块做。

代码

#include<cstdio>
#include<iostream>
#define ll long long

using namespace std;

const int N = 1e5 + 10;
int T, mo, A, B, C;

ll ksm(ll x, ll y, ll p) {
	ll re = 1;
	while (y) {if (y & 1) re = re * x % p; x = x * x % p; y >>= 1;}
	return re;
}

int prime[N], mu[N]; bool np[N];
ll jc[N], inv[N], ii2[N], F2[N], f2[N], fv2[N], phi[N], fakphi[N], fakphiv[N];
void Init() {
	inv[0] = inv[1] = 1; for (int i = 2; i <= 100000; i++) inv[i] = inv[mo % i] * (mo - mo / i) % mo;
	jc[0] = 1; for (int i = 1; i <= 100000; i++) jc[i] = jc[i - 1] * i % mo;
	ii2[0] = 1; for (int i = 1; i <= 100000; i++) ii2[i] = ii2[i - 1] * ksm(i, i, mo) % mo;
	mu[1] = 1; phi[1] = 1;
	for (int i = 2; i <= 100000; i++) {
		if (!np[i]) mu[i] = -1, prime[++prime[0]] = i, phi[i] = i - 1;
		for (int j = 1; j <= prime[0] && i * prime[j] <= 100000; j++) {
			np[i * prime[j]] = 1;
			if (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);
		}
		mu[i] += mu[i - 1];
		phi[i] += phi[i - 1];
	}
	
	for (int i = 0; i <= 100000; i++) F2[i] = 1;
	for (int i = 1; i <= 100000; i++) {
		f2[i] = i; fv2[i] = ksm(i, mo - 2, mo);
		for (int j = i; j <= 100000; j += i) {
			if (!(mu[j / i] - mu[j / i - 1])) continue;
			F2[j] = F2[j] * (mu[j / i] - mu[j / i - 1] == 1 ? f2[i] : fv2[i]) % mo;
		}
		F2[i] = ksm(F2[i], 1ll * i * i, mo);
		F2[i] = F2[i - 1] * F2[i] % mo;
	}
	
	for (int i = 0; i <= 100000; i++) fakphi[i] = 1; fakphiv[0] = 1;
	for (int i = 1; i <= 100000; i++) {
		for (int j = i; j <= 100000; j += i) {
			ll now = 1; if (mu[j / i] - mu[j / i - 1]) now = (mu[j / i] - mu[j / i - 1] == 1) ? i : inv[i];
			fakphi[j] = fakphi[j] * now % mo;
		}
		fakphi[i] = fakphi[i - 1] * fakphi[i] % mo;
		fakphiv[i] = ksm(fakphi[i], mo - 2, mo);
	}
}

ll sumgcd1(int n, int m, ll p) {
	ll re = 0;
	for (int L = 1, R; L <= n && L <= m; L = R + 1) {
		R = min(n / (n / L), m / (m / L));
		(re += 1ll * (mu[R] - mu[L - 1] + p) % p * (n / L) % p * (m / L) % p) %= p;
	}
	return re;
}

ll prodgcd1(int n, int m) {
	ll re = 1;
	for (int L = 1, R; L <= n && L <= m; L = R + 1) {
		R = min(n / (n / L), m / (m / L));
		ll di = 1; for (int i = L; i <= R; i++) di = di * i % mo;
		re = re * ksm(di, sumgcd1(n / L, m / L, mo - 1), mo) % mo;
	}
	return re;
}

void work1() {
	ll re = ksm(ksm(prodgcd1(A, C), mo - 2, mo), B, mo);
	(re *= ksm(ksm(jc[A], B, mo) * ksm(jc[B], A, mo) % mo, C, mo)) %= mo;
	(re *= ksm(ksm(prodgcd1(A, B), mo - 2, mo), C, mo)) %= mo;
	printf("%lld ", re);
}

ll sumn(ll x, ll p) {
	return 1ll * x * (x + 1) / 2 % p;
}

ll prodgcd2(ll n, ll m) {
	ll re = 1;
	for (int L = 1, R; L <= n && L <= m; L = R + 1) {
		R = min(n / (n / L), m / (m / L));
		re = re * ksm(F2[R] * ksm(F2[L - 1], mo - 2, mo) % mo, sumn(n / L, mo - 1) * sumn(m / L, mo - 1) % (mo - 1), mo) % mo;
	}
	return re;
}

void work2() {
	ll re = ksm(prodgcd2(A, C), (mo - 2) * sumn(B, mo - 1) % (mo - 1), mo);
	(re *= ksm(ii2[A], sumn(B, mo - 1) * sumn(C, mo - 1) % (mo - 1), mo)) %= mo;
	(re *= ksm(ii2[B], sumn(A, mo - 1) * sumn(C, mo - 1) % (mo - 1), mo)) %= mo;
	(re *= ksm(prodgcd2(A, B), (mo - 2) * sumn(C, mo - 1) % (mo - 1), mo)) %= mo;
	printf("%lld ", re);
}

ll prodi3(ll A, ll B, ll C) {
	ll re = 1;
	for (int L = 1, R; L <= A && L <= B && L <= C; L = R + 1) {
		R = min(A / (A / L), min(B / (B / L), C / (C / L)));
		ll now = ksm(jc[A / L], phi[R] - phi[L - 1], mo);
		re = re * ksm(now, (B / L) * (C / L) % (mo - 1), mo) % mo;
	}
	return re;
}

ll prodgcd3s(ll A, ll B) {
	ll re = 1;
	for (int L = 1, R; L <= A && L <= B; L = R + 1) {
		R = min(A / (A / L), B / (B / L));
		ll sum = fakphi[R] * fakphiv[L - 1] % mo;
		(re *= ksm(sum, (A / L) * (B / L) % (mo - 1), mo)) %= mo;
	}
	return re;
}

ll prodgcd3(ll A, ll B, ll C) {
	ll re = 1;
	for (int L = 1, R; L <= A && L <= B && L <= C; L = R + 1) {
		R = min(A / (A / L), min(B / (B / L), C / (C / L)));
		re = re * ksm(prodgcd3s(A / L, B / L), (C / L) * (phi[R] - phi[L - 1]) % (mo - 1), mo) % mo;
	}
	return re;
}

void work3() {
	ll re = ksm(prodgcd3(A, B, C), mo - 2, mo);
	(re *= prodi3(A, B, C)) %= mo;
	(re *= prodi3(B, A, C)) %= mo;
	(re *= ksm(prodgcd3(A, C, B), mo - 2, mo)) %= mo;
	printf("%lld\n", re);
}

int main() {
	scanf("%d %d", &T, &mo);
	Init();
	while (T--) {
		scanf("%d %d %d", &A, &B, &C);
		
		work1();
		work2();
		work3();
	}
	
	return 0;
}
posted @ 2022-04-27 19:30  あおいSakura  阅读(31)  评论(0)    收藏  举报