太菜了,不会生成函数,于是用特征方程来写的这道题

首先我们知道,形如\(a_n=A*a_{n-1}+B*a_{n-2}\)的特征方程为\(x^2=A*x+B\)

于是此题的递推式就是:\(x^2=233x+666\),即:\(x^2-233x-666=0\)

用求根公式解得:\(x_1=\dfrac{233+\sqrt{56953}}{2}, x_2=\dfrac{233-\sqrt{56953}}{2}\)

由于\(188305837≡\sqrt{56953}(mod\ 1e9+7)\)

所以变成:$x_1 = \(94153035\)‬$, \(x_2=905847205\)

跟据特征方程的结论:\(a_n=αx_1^n+β*x_2^n\)

因为\(a_0=0, a_1=1\),所以有:

\(α+β=0\)

\(94153035*α+905847205*β=1\)

解得:\(α=\dfrac{1}{188305837}=233230706, β=-\dfrac{1}{188305837}=-233230706\)

所以\(a_n=233230706*94153035^n-233230706*905847205^n\)

由于询问较多,所以我们要用\(O(1)\)光速幂求解

\(Code:\)

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define re register
il int read() {
re int x = 0, f = 1; re char c = getchar();
while(c < '0' || c > '9') { if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
return x * f;
}
#define rep(i, s, t) for(re int i = s; i <= t; ++ i)
#define maxn 300
const int mod = 1000000007;
const int x1 = 94153035, x2 = 905847205, a = 233230706;
int n, m, ans;
int f1[65540], f2[65540], f3[65540], f4[65540];
int g1[65540], g2[65540], g3[65540], g4[65540];
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;
}
il int mul(int a, int b) {
return 1ll * a * b % mod;
}
il int qpow1(int x) {
return mul(f1[x & 65535], f2[x >> 16]);
}
il int qpow2(int x) {
return mul(g1[x & 65535], g2[x >> 16]);
}
int main() {
f1[0] = g1[0] = 1;
rep(i, 1, 65536) f1[i] = mul(f1[i - 1], x1), g1[i] = mul(g1[i - 1], x2);
f2[0] = g2[0] = 1, f2[1] = f1[65536], g2[1] = g1[65536];
rep(i, 2, 65536) f2[i] = mul(f2[i - 1], f2[1]), g2[i] = mul(g2[i - 1], g2[1]);
int T = read(); init();
while(T --) {
n = (Rand()) % (mod - 1);
ans ^= 1ll * a * (qpow1(n) - qpow2(n) + mod) % mod;
}
printf("%d", ans);
return 0;
}

P5110 【块速递推】的更多相关文章

  1. P5110 块速递推-光速幂、斐波那契数列通项

    P5110 块速递推 题意 多次询问,求数列 \[a_i=\begin{cases}233a_{i-1}+666a_{i-2} & i>1\\ 0 & i=0\\ 1 & ...

  2. 洛谷 P5110 块速递推

    题目大意: 给定一个数列a满足递推式 \(An=233*an-1+666*an-2,a0=0,a1=1\) 求这个数列第n项模\(10^9+7\)的值,一共有T组询问 \(T<=10^7\) \ ...

  3. 洛谷P5110 块速递推 [分块]

    传送门 思路 显然可以特征根方程搞一波(生成函数太累),得到结果: \[ a_n=\frac 1 {13\sqrt{337}} [(\frac{233+13\sqrt{337}}{2})^n-(\fr ...

  4. P5110 块速递推

    传送门 为啥我就没看出来有循环节呢-- 打表可得,这个数列是有循环节的,循环节为\(10^9+6\),然后分块预处理,即取\(k=sqrt(10^9+6)\),然后分别预处理出转移矩阵\(A\)的\( ...

  5. Luogu5110 块速递推

    题面 题解 线性常系数齐次递推sb板子题 $a_n=233a_{n-1}+666a_{n-2}$的特征方程为 $$ x^2=233x+666 \\ x^2-233x+666=0 \\ x_1=\fra ...

  6. 【洛谷 P5110】 块速递推(矩阵加速,分块打表)

    题目链接 掌握了分块打表法了.原来以前一直想错了... 块的大小\(size=\sqrt n\),每隔\(size\)个数打一个表,还要在\(0\text{~}size-1\)每个数打一个表. 然后就 ...

  7. P5110-块速递推【特征方程,分块】

    正题 题目链接:https://www.luogu.com.cn/problem/P5110 题目大意 数列\(a\)满足 \[a_n=233a_{n-1}+666a_{n-2},a_0=0,a_1= ...

  8. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  9. Visual Studio 2015 速递(4)——高级特性之移动开发

    系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...

随机推荐

  1. vuex的Store简单使用过程

    介绍 Store的代码结构一般由State.Getters.Mutation.Actions这四种组成,也可以理解Store是一个容器,Store里面的状态与单纯的全局变量是不一样的,无法直接改变st ...

  2. Linux文件比对,批量复制

    --背景 工作中突然有一天文件服务器空间满了,导致文件存不进去,立马换了另外一台服务器作为文件服务器,将服务器挂载上去,原来的服务器修复之后需要重新换回来,但是需要将临时使用的服务器内的文件迁移至原文 ...

  3. wind安装Jenkins+sonar+jdk

    最近公司在用Jenkins持续集成软件,自己研究的头痛,而且还是和C#项目融合到一起的,网上看到的都是Java的,我自己配了一套和C#的,和你们分享. Jenkins是一个开源软件项目,旨在提供一个开 ...

  4. txt文件每行内容与图片文件名字组合,输出txt格式

    import os dir_list = os.listdir('C:\\Users\\10107472\\Desktop\\practice\\JPEGImages')i=0f1=open('C:\ ...

  5. ansible 中 JAVA_HOME不生效问题

    解决方案 ~/.bash_profile 是交互式.login 方式进入 bash 运行的,意思是只有用户登录时才会生效. ~/.bashrc 是交互式 non-login 方式进入 bash 运行的 ...

  6. PYTHON 文件读写、坐标寻址、查找替换

    读文件 打开文件(文件需要存在) #打开文件 f = open("data.txt","r") #设置文件对象 print(f)#文件句柄 f.close() ...

  7. linux技能点 六 软件管理和其他命令

    软件管理:rpm  ,yum apt -get (ubuntu) rpm -q:查询     rpm -i:安装   rpm -e:卸载    rpm -U:更新 yum install:安装   y ...

  8. python之路第一天

    2018-07-11星期三 创建自己的博客(博客园): 登陆 我的博客 随笔:所有人在博客中都能看见的文章 文章:别人看不见,只能URL访问--我把网页地址发给你,你才能看到 日志:别人看不到,URL ...

  9. QuickStart系列:docker部署之Gitlab本地代码仓库

    gitlab是可以在本地搭建的使用git作为源代码管理的仓库. 运行环境: win10+vmware14+docker7+docker 1. 使用命令拉取镜像(非必须,耗时比较久,这里以ce为准,ce ...

  10. MySQL用户与权限

    用户连接到mysql,并做各种查询,在用户和服务器中间分为两个阶段: 1:用户是否有权连接上来 2:用户是否有权执行此操作(如select,update等等) 先看第一个阶段:服务器如何判断用户是否有 ...