题目大意
给定
n
,
m
n,m
n,m,求
∑
i
=
1
n
∑
j
=
1
m
[
(
i
,
j
)
∈
p
r
i
m
e
]
\sum_{i=1}^n\sum_{j=1}^m[(i,j)\in prime]
i=1∑nj=1∑m[(i,j)∈prime]每个测试点有
T
T
T 组数据。
数据范围
1
⩽
n
,
m
⩽
1
0
7
,
1
⩽
T
⩽
1
0
4
1\leqslant n,m\leqslant10^7,1\leqslant T\leqslant 10^4
1⩽n,m⩽107,1⩽T⩽104
题解
先把
(
i
,
j
)
∈
p
r
i
m
e
(i,j)\in prime
(i,j)∈prime 提出来
∑
p
∈
p
r
i
m
e
min
(
n
,
m
)
∑
i
=
1
n
∑
j
=
1
m
[
(
i
,
j
)
=
p
]
\sum_{p\in prime}^{\min(n,m)}\sum_{i=1}^n\sum_{j=1}^m[(i,j)=p]
p∈prime∑min(n,m)i=1∑nj=1∑m[(i,j)=p]
然后常规套路后面两个
sigma
\text{sigma}
sigma。
原
式
=
∑
p
∈
p
r
i
m
e
min
(
n
,
m
)
∑
i
=
1
⌊
n
p
⌋
∑
j
=
1
⌊
m
p
⌋
[
(
i
,
j
)
=
1
]
=
∑
p
∈
p
r
i
m
e
min
(
n
,
m
)
∑
i
=
1
⌊
n
p
⌋
∑
j
=
1
⌊
m
p
⌋
∑
d
∣
i
,
d
∣
j
μ
(
d
)
=
∑
p
∈
p
r
i
m
e
min
(
n
,
m
)
∑
d
=
1
min
(
⌊
n
p
⌋
,
⌊
m
p
⌋
)
μ
(
d
)
(
∑
i
=
1
⌊
n
p
⌋
[
d
∣
i
]
)
(
∑
j
=
1
⌊
m
p
⌋
[
d
∣
j
]
)
=
∑
p
∈
p
r
i
m
e
min
(
n
,
m
)
∑
d
=
1
min
(
⌊
n
p
⌋
,
⌊
m
p
⌋
)
μ
(
d
)
⌊
n
p
d
⌋
⌊
m
p
d
⌋
\begin{aligned} 原式&=\sum_{p\in prime}^{\min(n,m)}\sum_{i=1}^{\lfloor\frac np\rfloor}\sum_{j=1}^{\lfloor\frac mp\rfloor}[(i,j)=1]\\ &=\sum_{p\in prime}^{\min(n,m)}\sum_{i=1}^{\lfloor\frac np\rfloor}\sum_{j=1}^{\lfloor\frac mp\rfloor}\sum_{d|i,d|j}\mu(d)\\ &=\sum_{p\in prime}^{\min(n,m)}\sum_{d=1}^{\min(\lfloor\frac np\rfloor,\lfloor\frac mp\rfloor)}\mu(d)\Bigg(\sum_{i=1}^{\lfloor\frac np\rfloor}[d|i]\Bigg)\Bigg(\sum_{j=1}^{\lfloor\frac mp\rfloor}[d|j]\Bigg)\\ &=\sum_{p\in prime}^{\min(n,m)}\sum_{d=1}^{\min(\lfloor\frac np\rfloor,\lfloor\frac mp\rfloor)}\mu(d)\Big\lfloor\frac{n}{pd}\Big\rfloor\Big\lfloor\frac m{pd}\Big\rfloor \end{aligned}
原式=p∈prime∑min(n,m)i=1∑⌊pn⌋j=1∑⌊pm⌋[(i,j)=1]=p∈prime∑min(n,m)i=1∑⌊pn⌋j=1∑⌊pm⌋d∣i,d∣j∑μ(d)=p∈prime∑min(n,m)d=1∑min(⌊pn⌋,⌊pm⌋)μ(d)(i=1∑⌊pn⌋[d∣i])(j=1∑⌊pm⌋[d∣j])=p∈prime∑min(n,m)d=1∑min(⌊pn⌋,⌊pm⌋)μ(d)⌊pdn⌋⌊pdm⌋
如此设 n n n 以内有 π ( n ) \pi(n) π(n) 个质数,则运行一次的时间复杂度为 T ( n ) = Θ ( π ( n ) × min ( n , m ) ) T(n)=\Theta\Big(\pi(n)\times\sqrt{\min(n,m)}\Big) T(n)=Θ(π(n)×min(n,m))根据素数定理,有 π ( n ) ∼ 1 ln n \pi(n)\sim\dfrac{1}{\ln n} π(n)∼lnn1,因而程序的时间复杂度为 T ( n ) = Ω ( n + T × min ( n , m ) ln n ) T(n)=\Omega\Bigg(n+T\times\frac{\sqrt{\min(n,m)}}{\ln n}\Bigg) T(n)=Ω(n+T×lnnmin(n,m))
按照题目的数据范围,计算得结果约为 6214206884.3 > 5 × 1 0 7 6214206884.3>5\times10^7 6214206884.3>5×107,而且素数定理的估计相对于我们的复杂度计算是乐观的,也就是说,结果可能会更大。因而我们只能考虑优化。
可以发现,第一个
sigma
\text{sigma}
sigma 的枚举顺序是没有前途的,是没有前途的,是没有前途的……因此我们要更换枚举顺序,至少不能让第一个
sigma
\text{sigma}
sigma 那么没有前途……尝试枚举
k
=
p
d
k=pd
k=pd,则
原
式
=
∑
k
=
1
min
(
n
,
m
)
∑
p
∈
p
r
i
m
e
,
p
∣
k
min
(
n
,
m
)
μ
(
k
p
)
⌊
n
p
d
⌋
⌊
m
p
d
⌋
原式=\sum_{k=1}^{\min(n,m)}\sum_{p\in prime,p|k}^{\min(n,m)}\mu\Big(\frac kp\Big)\Big\lfloor\frac{n}{pd}\Big\rfloor\Big\lfloor\frac m{pd}\Big\rfloor
原式=k=1∑min(n,m)p∈prime,p∣k∑min(n,m)μ(pk)⌊pdn⌋⌊pdm⌋
令 f ( n ) = ∑ p ∈ p r i m e , p ∣ k n μ ( k p ) f(n)=\sum_{p\in prime,p|k}^{n}\mu\Big(\frac kp\Big) f(n)=p∈prime,p∣k∑nμ(pk)则 原 式 = ∑ k = 1 min ( n , m ) f ( min ( n , m ) ) ⌊ n p d ⌋ ⌊ m p d ⌋ 原式=\sum_{k=1}^{\min(n,m)}f\big(\text{min}(n,m)\big)\Big\lfloor\frac{n}{pd}\Big\rfloor\Big\lfloor\frac m{pd}\Big\rfloor 原式=k=1∑min(n,m)f(min(n,m))⌊pdn⌋⌊pdm⌋
现在如果我们能够得到 f f f 的前缀和,那么就可以用除法分块了。