前置技能
积性函数
f(n) != 0 且 对于gcd(m, n) = 1
f(mn) = f(m)f(n)
则称该函数为积性函数
完全积性函数
对于任意的f(mn) = f(m)f(n) , 则 f(n)为完全积性函数
欧拉函数
欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)
φ(p) = p-1
φ(p^k) = p^k * (1 - 1/p) k >= 1
欧拉函数是一个积性函数
狄利克雷卷积
设 f(n), g(n) 是两个数论函数, 令
称其为 f(n) 与 g(n) 的狄利克雷卷积, 我们用 f(n) ∗ g(n) 表示.
如果f(n)和g(n)也是积性函数, 则h(n)也是积性函数
题解:
给你一个n唯一分解后的底数和指数, 然后问
很显然 这个东西可以写成狄利克雷卷积
的形式 并且 h(n) 是一个积性函数
又因为
所以:
然后 瞎暴力写就好了。。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL mod = 998244353;
LL quick_mod(LL a, LL b, LL m){
LL ans = 1;
while(b){
if(b & 1){
ans = ans * a % m;
b--;
}
b >>= 1;
a = a * a % m;
}
return ans;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
int N;
scanf("%d", &N);
LL A = 1;
while(N--){
LL p, q;
scanf("%lld%lld", &p, &q);
LL ans = 1;
ans = ans * quick_mod(p, q, mod);
LL temp = 1;
temp = q % mod * (p - 1) % mod;
temp %= mod;
temp = temp * quick_mod(p, q - 1, mod) % mod;
temp %= mod;
ans += temp;
ans %= mod;
A = A * ans % mod;
}
printf("%lld\n", A % mod);
}
return 0;
}
代码比较丑 - - - 233333