题意
有两个正整数
n
n
n 和
m
m
m。
我们考虑所有长度为
n
n
n,每个元素在
[
1
,
m
]
[1, m]
[1,m] 的整数序列。对于所有整数序列,设
l
c
m
lcm
lcm 为这个序列中元素的最小公倍数,
g
c
d
gcd
gcd 为这个序列中元素的最大公约数,我们希望求出
l
c
m
g
c
d
lcm^{gcd}
lcmgcd。你需要对于所有这些整数序列,计算
l
c
m
g
c
d
lcm^{gcd}
lcmgcd 之积
m
o
d
998244353
mod \ 998244353
mod 998244353。
即,我们需要计算
(
∏
x
1
,
x
2
,
.
.
.
,
x
n
∈
[
1
,
m
]
l
c
m
(
x
1
,
x
2
,
.
.
.
,
x
n
)
g
c
d
(
x
1
,
x
2
,
.
.
.
,
x
n
)
)
m
o
d
998244353
(\prod_{x_1,x_2,...,x_n \in [1,m]}lcm(x_1,x_2,...,x_n)^{gcd(x_1,x_2,...,x_n)}) \ mod \ 998244353
(∏x1,x2,...,xn∈[1,m]lcm(x1,x2,...,xn)gcd(x1,x2,...,xn)) mod 998244353。
S
u
b
t
a
s
k
1
(
10
p
t
s
)
Subtask \ 1(10pts)
Subtask 1(10pts):
n
,
m
≤
5
n,m \leq 5
n,m≤5。
S
u
b
t
a
s
k
2
(
20
p
t
s
)
Subtask \ 2(20pts)
Subtask 2(20pts):
n
,
m
≤
50
n,m \leq 50
n,m≤50。
S
u
b
t
a
s
k
3
(
10
p
t
s
)
Subtask \ 3(10pts)
Subtask 3(10pts):
n
,
m
≤
500
n,m \leq 500
n,m≤500。
S
u
b
t
a
s
k
4
(
20
p
t
s
)
Subtask \ 4(20pts)
Subtask 4(20pts):
n
,
m
≤
50000
n,m \leq 50000
n,m≤50000。
S
u
b
t
a
s
k
5
(
20
p
t
s
)
Subtask \ 5(20pts)
Subtask 5(20pts):
n
,
m
≤
200000
n,m \leq 200000
n,m≤200000。
S
u
b
t
a
s
k
6
(
20
p
t
s
)
Subtask \ 6(20pts)
Subtask 6(20pts):
n
≤
1
0
8
,
m
≤
200000
n \leq 10^8,m \leq 200000
n≤108,m≤200000。
题解
由于求的是乘积,且lcm会很大,故单独考虑每一个质因数的贡献,即枚举
p
q
p^{q}
pq,计算
p
q
≤
l
c
m
p^{q}\le lcm
pq≤lcm的数列的
g
c
d
gcd
gcd的和。
显然
p
q
≤
l
c
m
p^{q}\le lcm
pq≤lcm不好算,而
p
q
>
l
c
m
p^{q}>lcm
pq>lcm较好算,于是容斥,计算
p
q
>
l
c
m
p^{q}>lcm
pq>lcm的数列的
g
c
d
gcd
gcd的和时,需枚举
g
c
d
gcd
gcd,而这个
g
c
d
gcd
gcd可能与
p
q
p^{q}
pq有公约数,不方便计算,需要枚举公约数为
p
a
p^{a}
pa,然后直接像计算总答案那样反演即可,
a
=
0
a=0
a=0时用整除分块,
a
>
0
a>0
a>0时直接枚举,效率为
O
(
m
l
o
g
2
m
+
m
n
)
O(mlog^{2}m+m\sqrt{n})
O(mlog2m+mn)。