正题

题目链接:https://www.luogu.com.cn/problem/P5110


题目大意

数列aaa满足
an=233an−1+666an−2,a0=0,a1=1a_n=233a_{n-1}+666a_{n-2},a_0=0,a_1=1an​=233an−1​+666an−2​,a0​=0,a1​=1
TTT组询问给出nnn求ana_nan​

1≤T≤5×1071\leq T\leq 5\times 10^71≤T≤5×107,nnn在unsigned long long\text{unsigned long long}unsigned long long范围内


解题思路

上面那个递推式的特征方程就是x2−233x−666x^2-233x-666x2−233x−666,直接带式子解出来x0=233+569532,x1=233−569532x_0=\frac{233+\sqrt{56953}}{2},x_1=\frac{233-\sqrt{56953}}{2}x0​=2233+56953​​,x1​=2233−56953​​。

然后设an=c0x0n+c1x1na_n=c_0x_0^n+c_1x_1^nan​=c0​x0n​+c1​x1n​,那么带入a0a_0a0​和a1a_1a1​就有
{c0+c1=0c0233+569532+c1233−569532=1\left\{\begin{matrix}c_0+c_1=0\\c_0\frac{233+\sqrt{56953}}{2}+c_1\frac{233-\sqrt{56953}}{2}=1\end{matrix}\right.{c0​+c1​=0c0​2233+56953​​+c1​2233−56953​​=1​
解出来有c0=156953,c1=−156953c_0=\frac{1}{\sqrt{56953}},c_1=-\frac{1}{\sqrt{56953}}c0​=56953​1​,c1​=−56953​1​。

这样我们就可以O(Tlog⁡n)O(T\log n)O(Tlogn)求答案了,但是还是不够。

先根据欧拉定理让nnn模上φ(P)\varphi(P)φ(P)缩小范围

然后分块处理快速幂,处理出xix^ixi和xiP(i∈[0,P])x^{i\sqrt P}(i\in[0,\sqrt P])xiP​(i∈[0,P​]),这个是O(P)O(\sqrt P)O(P​)的,然后每次把nnn分为整块的成上末尾的就好了。

时间复杂度O(P+T)O(\sqrt P+T)O(P​+T)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll P=1e9+7,Phi=P-1;
const ll sq=188305837,T=32000;
ll Q,n,p0[T+1],p1[T+1],P0[T+1],P1[T+1],ans;
ll pw0(ll x){return P0[x/T]*p0[x%T]%P;}
ll pw1(ll x){return P1[x/T]*p1[x%T]%P;}
namespace Mker
{unsigned long long SA,SB,SC;void init(){scanf("%llu%llu%llu",&SA,&SB,&SC);}unsigned long long rand(){SA^=SA<<32,SA^=SA>>13,SA^=SA<<1;unsigned long long t=SA;SA=SB,SB=SC,SC^=t^SA;return SC%Phi;}
}
signed main()
{ll inv2=(P+1)/2;ll x0=(233+sq)*inv2%P,x1=(P+233-sq)*inv2%P;p0[0]=p1[0]=P0[0]=P1[0]=1;for(ll i=1;i<=T;i++)p0[i]=p0[i-1]*x0%P,p1[i]=p1[i-1]*x1%P;for(ll i=1;i<=T;i++)P0[i]=P0[i-1]*p0[T]%P,P1[i]=P1[i-1]*p1[T]%P;ll inv=233230706,c0=inv,c1=P-inv;scanf("%lld",&Q);Mker::init();while(Q--){n=Mker::rand();
//      scanf("%lld",&n);ans=0;ans^=(c0*pw0(n)+c1*pw1(n))%P;
//      printf("%lld\n",ans);}printf("%lld\n",ans);
}

P5110-块速递推【特征方程,分块】相关推荐

  1. 洛谷P5110:块速递推(特征根方程、光速幂)

    解析 去你的搬砖生成函数,特征根太香了. 一开始我是用生成函数解的,和特征根相比有亿点点搬砖- 但是这个东西原理似乎使用一些神奇的等比差分,有些玄学,生成函数较易理解. 背下来背下来! 就以本题为情境 ...

  2. 数列递推(牛客练习赛83)(数学、分块)

    数列递推 给定f(0)f(0)f(0),定义fn=∑i=1nf(nmodi)f_n = \sum\limits_{i = 1} ^{n} f_{(n \mod i)}fn​=i=1∑n​f(nmodi ...

  3. luogu P4240 毒瘤之神的考验(莫比乌斯反演+递推前缀和+数论分块)

    problem 洛谷链接 solution ∑i=1n∑j=1mφ(ij)=∑i=1n∑j=1mφ(i)φ(j)gcd⁡(i,j)φ(gcd⁡(i,j))\sum_{i=1}^n\sum_{j=1}^ ...

  4. 【组合数学】递推方程 ( 特征方程与特征根 | 特征方程示例 | 一元二次方程根公式 )

    文章目录 一.特征方程与特征根 二.特征方程与特征根 示例 ( 重要 ) 一.特征方程与特征根 常系数线性齐次递推方程标准型 : {H(n)−a1H(n−1)−a2H(n−2)−⋯−akH(n−k)= ...

  5. 特征方程求数列的通项公式(二阶线性递推式)

    特征方程求数列的通项公式(二阶线性递推式) 已知数列{an}\{a_n\}{an​}满足fn=afn−1+bfn−2,a,b∈N,b≠0,n>2,f1=c1,f2=c2,(c1,c2f_n=af ...

  6. 组合数学——特征方程与线性递推方程

    组合数学--特征方程与线性递推方程 大多数计数问题都可以表示成线性的递推关系,而特征方程是解决这些线性递推关系的有利工具. 一个度为 kkk 的 线性齐次常系数递推方程 指的是具有如下形式的方程: a ...

  7. 【算法讲26:特征方程】求齐次线性一阶递推与二阶递推通项公式 | HDU 2021多校一 Pass!

    [算法讲26:特征方程]求一阶递推与二阶递推通项公式 引入 齐次线性一阶递推 齐次线性二阶递推 题目解法 下文中详细证明略,可以看 [数列]特征方程与特征根 引入 HDU 2021多校一 Pass! ...

  8. 抖音火爆的早安推送在线版,新功能速递,支持推送时间自定义,添加生日日期计算

    抖音火爆的早安推送在线版,新功能速递,支持推送时间自定义,添加生日日期计算 传送门 问题咨询:1319723770@qq.com 新功能一:支持推送时间自定义 操作路径 消息推送列表界面,找到需要修改 ...

  9. 从递推式到通项公式 特征方程学习笔记

    参考文章 ruanxingzhi 引入 对于一些递推式,我们常常会有关于求数列某一项的问题,如果我们能推出其通项公式,那么问题就会变得更好解决,特征方程就是一个有力的工具. 相关定义及引理 我们定义对 ...

最新文章

  1. vue 新手指引_精通react/vue组件设计之快速实现一个可定制的进度条组件
  2. python有哪些作用-python能用来做什么?Python都有哪些逆天的功能
  3. 第一个hibernate程序
  4. 乐高创意机器人moc_乐高变形金刚爵士方头仔MOC图纸
  5. 要闻君说:Intel要“起底”新任CEO了?微软停止支持Win 7?OPPO加入WPC无线充电联盟,15W无线闪充技术呼之欲出!...
  6. 从入门到精通 pdf_【推荐】铅笔素描从入门到精通pdf|素描基础教程电子书下载!...
  7. gson json转map_Java 中几种常用 JSON 库性能比较
  8. 解决内网用户不能正常访问内部WEB服务器问题
  9. Ubuntu18.04之man中文版
  10. MySQL技术:InnoDB 存储引擎(不同版本的 Master Thread 工作方式)
  11. Slices in Python
  12. 【网络编程学习之旅】一文学习网络编程之NIO
  13. 苹果邮箱怎么登录qq邮箱_电子邮箱 电子邮箱格式怎么写
  14. 【速成MSP430f149】电赛期间学习MSP430f149笔记
  15. node文件通过不同的后缀名解析不同的文件类型
  16. ETC卡 PSAM卡消费流程(转载)
  17. 海思3516, 单摄像头接hdmi,并输出h.265文件
  18. c语言企业自动化管理系统,基于C语言制作的人事管理系统-自动化毕业论文.doc...
  19. java文本复制和键盘输入文字保存到文件
  20. [No0000CC]眼袋和黑眼圈的应对方法——疏筋穴

热门文章

  1. python web前端开发面试_面试前端,听听别人怎么说!
  2. 2×3卡方检验prism_卡方独立性检验原理
  3. python +appium实现原理_python_appium使用原理
  4. java 生成jar_java如何生成jar
  5. webgl坐标转换_OpenGL/WebGL顶点坐标变换过程简介
  6. 乐高创意机器人moc_乐高MOC佳作欣赏丨机械之美机器人乐高作品集1
  7. python导入文件列行_python读写csv文件并增加行列的实例代码
  8. 量子计算机与新型传感器,新型量子传感器为超导量子计算机发展开辟了新路径...
  9. android+百度lbs云,百度——LBS.云 v2.0——云存储扩展字段——Android
  10. 算法设计与分析——递归与分治——归并排序