Master of Phi
推式子
∑ d ∣ n ϕ ( n d ) d 给 出 了 n 的 唯 一 分 解 形 式 我 们 先 对 上 面 式 子 进 行 化 简 通 过 组 合 枚 举 d , d 的 取 值 分 别 可 以 通 过 ∏ i = 1 m ∑ j = 0 q i p i j , 一 个 多 项 式 组 合 得 到 那 么 上 述 的 式 子 有 没 有 可 能 也 通 过 这 种 新 式 得 到 呢 , 好 像 是 可 以 的 ∑ d ∣ n ϕ ( n d ) d = ∏ i = 1 m ∑ j = 0 q i ϕ ( p i j ) p i q i p i j 我 们 随 意 枚 举 一 项 ∑ j = 0 q i ϕ ( p i j ) p i q i p i j 出 来 p q , ( p − 1 ) p q − 1 , ( p − 1 ) p q − 1 … ( p − 1 ) p q − 1 = p q − 1 ( p q + p − q ) 然 后 就 是 简 单 的 代 码 实 现 了 。 \sum_{d \mid n} \phi(\frac{n}{d})d\\ 给出了n的唯一分解形式\\ 我们先对上面式子进行化简\\ 通过组合枚举d,d的取值分别可以通过\prod_{i = 1} ^{m} \sum_{j = 0} ^{q_i} p_{i} ^{j},一个多项式组合得到\\ 那么上述的式子有没有可能也通过这种新式得到呢,好像是可以的\\ \sum_{d \mid n} \phi(\frac{n}{d})d = \prod_{i = 1} ^{m} \sum_{j = 0} ^{q_{i}}\phi(p_{i} ^ j) \frac{p_{i} ^{q_i}}{p_{i} ^j}\\ 我们随意枚举一项\sum_{j = 0} ^{q_{i}}\phi(p_{i} ^ j) \frac{p_{i} ^{q_i}}{p_{i} ^j}出来\\ p ^ q,(p - 1) p ^{q - 1}, (p - 1) p ^{q - 1} \dots(p - 1)p ^{q - 1}\\ = p ^{q - 1} (pq + p - q)\\ 然后就是简单的代码实现了。 d∣n∑ϕ(dn)d给出了n的唯一分解形式我们先对上面式子进行化简通过组合枚举d,d的取值分别可以通过i=1∏mj=0∑qipij,一个多项式组合得到那么上述的式子有没有可能也通过这种新式得到呢,好像是可以的d∣n∑ϕ(dn)d=i=1∏mj=0∑qiϕ(pij)pijpiqi我们随意枚举一项j=0∑qiϕ(pij)pijpiqi出来pq,(p−1)pq−1,(p−1)pq−1…(p−1)pq−1=pq−1(pq+p−q)然后就是简单的代码实现了。
代码
/*
Author : lifehappy
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 998244353;
ll quick_pow(ll a, int n) {
ll ans = 1;
while(n) {
if(n & 1) ans = ans * a % mod;
a = a * a % mod;
n >>= 1;
}
return ans;
}
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int T;
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
ll ans = 1;
for(int i = 1; i <= n; i++) {
ll p, q;
scanf("%lld %lld", &p, &q);
ll temp = ((p * q % mod + p - q) % mod + mod) % mod;
ans = ans * quick_pow(p, q - 1) % mod * temp % mod;
}
printf("%lld\n", ans);
}
return 0;
}