题目背景
一个简单的问题,什么是递推?
题目描述
定义一个数列 的递推式为满足下式的序列 :
称为该递推式的阶数。特别地,。
给你一个无限长的数列 的前 项以及数列 的一个阶数为 的递推式 。
要求求出数列 的所有项之和。答案对 取模。
可以证明,对于任意一个模 意义下输入,都存在实数意义下的一个对应数列的答案是收敛的。
输入格式
第一行一个正整数 。
第二行输入 个整数,表示序列 的前 项即 在模 意义下的值。
第三行输入 个整数,表示递推式 在模 意义下的值。
输出格式
输出一行一个整数,表示数列 的所有项之和对 取模的结果。
保证答案可以在模 意义下表示,即如果最终的答案为分数 (可以证明答案肯定是一个有理数),保证 。
输入输出样例 #1
输入 #1
输出 #1
输入输出样例 #2
输入 #2
1 2 3
| 2 1 1 1 199648870 99824435
|
输出 #2
输入输出样例 #3
输入 #3
输出 #3
说明/提示
样例解释 #1
。
即 ,即数列 是等比数列 。其和收敛于 。
样例解释 #2
。
即 。经计算,其和收敛于 。
本题使用子任务捆绑/依赖
对于所有子任务,, 。特别地,。
子任务编号 |
分值 |
|
依赖 |
|
|
|
无 |
|
|
|
|
|
|
|
|
题解
将序列 写成生成函数:
根据题面给出的递推式:
可以得出一个经典构造。以 为例:

由递推式,红色部分(即每列 中 的系数项)的和均为 0。因此,绿色部分(等式左边低阶项的和)等于蓝色部分(截断有限和)的和。即:
将 除到右边即可得到 的封闭式。
本题要求 。发现 ,直接代入 计算:
使用前缀和优化右侧求和过程,时间复杂度为 。