Problem A: Clock Sequence

一看数据范围,…疯了。

我们先想想能不能找规律?

好很好,找到了…

我们发现可以把这个序列 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=1n106i)+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=0n1((ni)×106i)

然后是循环节外的:

( ∑ i = 1 n 1 0 6 i ) × b 15 (\sum_{i=1}^{n} 10^{6i}) \times b_{15} (i=1n106i)×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=0n2((n1i)×106i)+(i=1n106i)×b15) % 123454321=(a15×i=0n2((n1i)×106i)+999999(106n1)b15) % 123454321=(a15×(999999(106(n1)1)(n1)i=0n2(i×106i))+999999(106n1)b15) % 123454321

这时候,可能会发现 ∑ i = 0 n − 2 ( i × 1 0 6 i ) \sum_{i=0}^{n-2} (i\times10^{6i}) i=0n2(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} S106SS106S999999S999999SS=i=0n2(i×106i)=i=0n2(i×106(i+1))=i=1n1((i1)×106i)=i=0n2(i×106i)i=1n1((i1)×106i)=i=1n2106i(n2)×106(n1)=999999106(106(n2)1)(n2)×106(n1)=999999999999106(106(n2)1)(n2)×106(n1)

现在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(n1)1)(n1)i=0n2(i×106i))+999999(106n1)b15) % 123454321(a15×(999999(106(n1)1)(n1)+999999999999106(10(6n2)1)(n2)×106(n1))+999999(106n1)b15) % 123454321(a15×999999(106(n1)1)(n1)+999999106(106(n2)1)(n2)×106(n1)+999999(106n1)b15) % 123454321(a15×999999106(n1)×(n1)n+1+999999106(106(n2)1)(n2)×106(n1)+999999(106n1)b15) % 123454321(a15×999999106(n1)n+1+999999106(106(n2)1)+999999(106n1)b15) % 123454321

简化到这,就足以让我们把 n n n 带进去计算了。

注意,这里求逆元不能用 x p − 2 x^{p-2} xp2,因为 123454321 123454321 123454321 他不是质数,

我们要用 e x g c d exgcd exgcd

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值