qoj6277 Linear Congruential Generator

SOLUTION FROM WUMIN4

题意

给出无穷序列 \(X_0\) 的值和 \(a,c\),令 \(X_{i+1}=(aX_i+c)\bmod m\)

给出 \(l_1,r_1,l_2,r_2\),求:

\[\sum_{i=l_1}^{r_1} \sum_{j=l_2}^{r_2}( X_i \bmod (X_j+1)) \]

\(1\le T\le 10^5,1\le \sum m\le 10^6,1\le a,c,X_0<m,1\le l_1,r_1,l_2,r_2\le 10^6\)

思路

原式化为:

\[\sum_{i=l_1}^{r_1} \sum_{j=l_2}^{r_2} X_i - \lfloor\frac{X_i}{X_j+1}\rfloor(X_j+1) \\ (r_2-l_2+1)\sum_{i=l_1}^{r_1} X_i - \sum_{i=l_1}^{r_1} \sum_{j=l_2}^{r_2} \lfloor\frac{X_i}{X_j+1}\rfloor(X_j+1) \]

观察到当 \((X_j+1)\) 越来越大时,\(\lfloor\frac{X_i}{X_j+1}\rfloor\) 所算出来的重复的值会越来越多。

具体的,由于 \(X_i\) 的上限为 \(m-1\),对于 \(X_j\) 最多只会出现 \(\lfloor\frac{m-1}{X_j+1}\rfloor\) 个不同的元素。

假如 \(X_j\) 也互不相同,则总元素个数即为 \(\sum_{i=1}^m \lfloor\frac{m-1}{i}\rfloor\),这个数量是 \(m\log m\) 级别的。

对于每个 \(X_j\),所有满足 \(k(X_j + 1)\le X_i < (k + 1)(X_j + 1)\)\(X_i\) 得到的答案都是相同的。

于是统计在 \([l_2,r_2]\)\([0,m-1]\) 的每个 \(X_j\) 出现的次数,容易证明原序列总是会出现长度不超过 \(m\) 的循环节,并枚举 \(k=0,1,\cdots,\lfloor\frac{m-1}{X_j+1}\rfloor\),统计 \(X_i\) 的出现次数,求和即可。

posted @ 2025-09-20 10:43  WuMin4  阅读(6)  评论(0)    收藏  举报