题目描述
有$T$组询问,每次给定$n,m$求$1 \le x \le n \wedge 1 \le y \le m \wedge (x,y) \in P$的$(x,y)$的个数,其中$P$是素数集合
$T = 10000 \wedge n,m \le 10000000$
题解
大力推一波式子吧
$$
\begin{aligned}
n \le m \\
\sum_{p \in P}\sum_{i=1}^{n}\sum_{j=1}^{m}[(i,j)=p]
&=\sum_{p \in P}\sum_{d=1}^{\lfloor \frac{n}{p} \rfloor}\mu(d)\lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor \\
&=\sum_{p \in P}\sum_{T=1 \wedge p \mid T}^{n} \mu(\frac{T}{p}) \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor \\
&=\sum_{T=1}^{n} \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor \sum_{p \in P \wedge p \mid T} \mu(\frac{T}{p}) \\
&=\sum_{T=1}^{n} \lfloor \frac{n}{T} \rfloor \lfloor \frac{m}{T} \rfloor f(T) \\
f(T)=\sum_{p \in P \wedge p \mid T}\mu(\frac{T}{p})
\end{aligned}
$$
对于每一个$p$,$p \mid T \wedge T \le n$的$T$的取值有$\lfloor \frac{n}{p} \rfloor$种,用每个素数来更新它的倍数的$f$值即可
由于素数定理及调和级数可得知预处理是$O(n+\frac{n}{\log n} \log \frac{n}{\log n})=O(n)$的 实际上是$O(n \log \log n)$的
代码
1 |
|