一看数据范围,…疯了。
我们先想想能不能找规律?
好很好,找到了…
我们发现可以把这个序列
15
15
15 个分为一组,因为他们前面
6
6
6 位的循环节个数一样
然后我们又发现这 15 15 15 个一组的序列连末尾都一样!
这不就很明显了
我们把要求的前 n n n 个数的和分为两段,一段是多组组成的。一段是余下来的数。
然后,对于余下来的数,我们直接打标搞定。
先设 a a a 数组代表在 15 15 15 个一组的数中的循环节的前缀和, b b b 数组代表每个 15 15 15 个一组的数中末尾不在循环节的数的前缀和
如下:
余下来的数可以这样表示(这里设 n n n 为组的个数, m m m为余下的数的个数)
a m × ( ∑ i = 1 n 1 0 6 i ) + 1 0 6 i × b m a_m \times (\sum_{i=1}^{n} 10^{6i}) + 10^{6i} \times b_m am×(i=1∑n106i)+106i×bm
前面可以 O ( 1 ) O(1) O(1) 用等比数列计算。
我们看看前面多组组成的数怎么计算?
首先是循环节:
a 15 × ∑ i = 0 n − 1 ( ( n − i ) × 1 0 6 i ) a_{15} \times \sum_{i=0}^{n-1} \big((n-i)\times10^{6i}\big) a15×i=0∑n−1((n−i)×106i)
然后是循环节外的:
( ∑ i = 1 n 1 0 6 i ) × b 15 (\sum_{i=1}^{n} 10^{6i}) \times b_{15} (i=1∑n106i)×b15
合并在一起就是
( a 15 × ∑ i = 0 n − 2 ( ( n − 1 − i ) × 1 0 6 i ) + ( ∑ i = 1 n 1 0 6 i ) × b 15 ) % 123454321 = ( a 15 × ∑ i = 0 n − 2 ( ( n − 1 − i ) × 1 0 6 i ) + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 = ( a 15 × ( ( 1 0 6 ( n − 1 ) − 1 ) ( n − 1 ) 999999 − ∑ i = 0 n − 2 ( i × 1 0 6 i ) ) + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 \begin{aligned} &~~~~~\Big(a_{15}\times \sum_{i=0}^{n-2} \big((n-1-i)\times10^{6i}\big) + (\sum_{i=1}^{n} 10^{6i}) \times b_{15}\Big)~\%~123454321 \\ & = \Big(a_{15}\times \sum_{i=0}^{n-2} \big((n-1-i)\times10^{6i}\big) + \frac{(10^{6n} - 1)b_{15}}{999999}\Big)~\%~123454321 \\ & = \Bigg(a_{15}\times \Big(\frac{(10^{6(n-1)}-1)(n-1)}{999999} - \sum_{i=0}^{n-2} (i\times10^{6i})\Big) + \frac{(10^{6n} - 1)b_{15}}{999999}\Bigg)~\%~123454321 \\ \end{aligned} (a15×i=0∑n−2((n−1−i)×106i)+(i=1∑n106i)×b15) % 123454321=(a15×i=0∑n−2((n−1−i)×106i)+999999(106n−1)b15) % 123454321=(a15×(999999(106(n−1)−1)(n−1)−i=0∑n−2(i×106i))+999999(106n−1)b15) % 123454321
这时候,可能会发现 ∑ i = 0 n − 2 ( i × 1 0 6 i ) \sum_{i=0}^{n-2} (i\times10^{6i}) ∑i=0n−2(i×106i) 比较难 O ( 1 ) O(1) O(1) 计算
我们可以这样:
设 S = ∑ i = 0 n − 2 ( i × 1 0 6 i ) 1 0 6 S = ∑ i = 0 n − 2 ( i × 1 0 6 ( i + 1 ) ) = ∑ i = 1 n − 1 ( ( i − 1 ) × 1 0 6 i ) ∴ S − 1 0 6 S = ∑ i = 0 n − 2 ( i × 1 0 6 i ) − ∑ i = 1 n − 1 ( ( i − 1 ) × 1 0 6 i ) − 999999 S = ∑ i = 1 n − 2 1 0 6 i − ( n − 2 ) × 1 0 6 ( n − 1 ) − 999999 S = 1 0 6 ( 1 0 6 ( n − 2 ) − 1 ) 999999 − ( n − 2 ) × 1 0 6 ( n − 1 ) S = − 1 0 6 ( 1 0 6 ( n − 2 ) − 1 ) 999999 − ( n − 2 ) × 1 0 6 ( n − 1 ) 999999 \begin{aligned} 设S&=\sum_{i=0}^{n-2} (i\times10^{6i}) \\ 10^6S& = \sum_{i=0}^{n-2} (i\times10^{6(i+1)}) \\ &=\sum_{i=1}^{n-1} \big((i-1)\times10^{6i}\big)\\ \therefore S-10^6S &=\sum_{i=0}^{n-2} (i\times10^{6i})-\sum_{i=1}^{n-1} \big((i-1)\times10^{6i}\big) \\ -999999S &= \sum_{i=1}^{n-2}10^{6i} -(n-2)\times10^{6(n-1)}\\ -999999S&= \frac{10^6(10^{6(n-2)}-1)}{999999}-(n-2)\times10^{6(n-1)}\\ S&= -\frac{\frac{10^6(10^{6(n-2)}-1)}{999999}-(n-2)\times10^{6(n-1)}}{999999}\end{aligned} 设S106S∴S−106S−999999S−999999SS=i=0∑n−2(i×106i)=i=0∑n−2(i×106(i+1))=i=1∑n−1((i−1)×106i)=i=0∑n−2(i×106i)−i=1∑n−1((i−1)×106i)=i=1∑n−2106i−(n−2)×106(n−1)=999999106(106(n−2)−1)−(n−2)×106(n−1)=−999999999999106(106(n−2)−1)−(n−2)×106(n−1)
现在S也可以O(1)求了,把S带回原式
( a 15 × ( ( 1 0 6 ( n − 1 ) − 1 ) ( n − 1 ) 999999 − ∑ i = 0 n − 2 ( i × 1 0 6 i ) ) + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 = ( a 15 × ( ( 1 0 6 ( n − 1 ) − 1 ) ( n − 1 ) 999999 + 1 0 6 ( 1 0 ( 6 n − 2 ) − 1 ) 999999 − ( n − 2 ) × 1 0 6 ( n − 1 ) 999999 ) + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 = ( a 15 × ( 1 0 6 ( n − 1 ) − 1 ) ( n − 1 ) + 1 0 6 ( 1 0 6 ( n − 2 ) − 1 ) 999999 − ( n − 2 ) × 1 0 6 ( n − 1 ) 999999 + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 = ( a 15 × 1 0 6 ( n − 1 ) × ( n − 1 ) − n + 1 + 1 0 6 ( 1 0 6 ( n − 2 ) − 1 ) 999999 − ( n − 2 ) × 1 0 6 ( n − 1 ) 999999 + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 = ( a 15 × 1 0 6 ( n − 1 ) − n + 1 + 1 0 6 ( 1 0 6 ( n − 2 ) − 1 ) 999999 999999 + ( 1 0 6 n − 1 ) b 15 999999 ) % 123454321 \begin{aligned} & \Bigg(a_{15}\times \Big(\frac{(10^{6(n-1)}-1)(n-1)}{999999} - \sum_{i=0}^{n-2} (i\times10^{6i})\Big) + \frac{(10^{6n} - 1)b_{15}}{999999}\Bigg)~\%~123454321 \\ =&\Bigg(a_{15}\times \Big(\frac{(10^{6(n-1)}-1)(n-1)}{999999} + \frac{\frac{10^6(10^{(6n-2)}-1)}{999999}-(n-2)\times10^{6(n-1)}}{999999}\Big) + \frac{(10^{6n} - 1)b_{15}}{999999}\Bigg)~\%~123454321\\ =&\Bigg(a_{15}\times \frac{(10^{6(n-1)}-1)(n-1)+\frac{10^6(10^{6(n-2)}-1)}{999999}-(n-2)\times10^{6(n-1)}}{999999} + \frac{(10^{6n} - 1)b_{15}}{999999}\Bigg)~\%~123454321\\ =&\Bigg(a_{15}\times \frac{10^{6(n-1)}\times(n-1)-n+1+\frac{10^6(10^{6(n-2)}-1)}{999999}-(n-2)\times10^{6(n-1)}}{999999} + \frac{(10^{6n} - 1)b_{15}}{999999}\Bigg)~\%~123454321\\ =&\Bigg(a_{15}\times \frac{10^{6(n-1)}-n+1+\frac{10^6(10^{6(n-2)}-1)}{999999}}{999999} + \frac{(10^{6n} - 1)b_{15}}{999999}\Bigg)~\%~123454321 \end{aligned} ====(a15×(999999(106(n−1)−1)(n−1)−i=0∑n−2(i×106i))+999999(106n−1)b15) % 123454321(a15×(999999(106(n−1)−1)(n−1)+999999999999106(10(6n−2)−1)−(n−2)×106(n−1))+999999(106n−1)b15) % 123454321(a15×999999(106(n−1)−1)(n−1)+999999106(106(n−2)−1)−(n−2)×106(n−1)+999999(106n−1)b15) % 123454321(a15×999999106(n−1)×(n−1)−n+1+999999106(106(n−2)−1)−(n−2)×106(n−1)+999999(106n−1)b15) % 123454321(a15×999999106(n−1)−n+1+999999106(106(n−2)−1)+999999(106n−1)b15) % 123454321
简化到这,就足以让我们把 n n n 带进去计算了。
注意,这里求逆元不能用 x p − 2 x^{p-2} xp−2,因为 123454321 123454321 123454321 他不是质数,
我们要用 e x g c d exgcd exgcd。