「Luogu 1349」广义斐波那契数列
Portal
Portal1: Luogu
Description
广义的斐波那契数列是指形如\(an=p \times a_{n-1}+q \times a_{n-2}\)的数列。今给定数列的两系数\(p\)和\(q\),以及数列的最前两项\(a_1\)和\(a_2\),另给出两个整数\(n\)和\(m\),试求数列的第\(n\)项\(a_n\)除以\(m\)的余数。
Input
输入包含一行6个整数。依次是\(p\),\(q\),\(a_1\),\(a_2\),\(n\),\(m\),其中在\(p\),\(q\),\(a_1\),\(a_2\)整数范围内,\(n\)和\(m\)在长整数范围内。
Output
输出包含一行一个整数,即\(a_n\)除以\(m\)的余数。
Sample Input
1 1 1 1 10 7
Sample Output
6
Hint
数列第\(10\)项是\(55\),除以\(7\)的余数为\(6\)。
Solution
基本斐波那契数列矩阵是\(T = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}\);
广义斐波那契数列矩阵是\(F = \begin{bmatrix} p & 1 \\ q & 0 \end{bmatrix}\)。
那么要求的就是:
\]
然后就可以用矩阵快速幂来解决了。
Code
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long LL;
struct Matrix {
LL a[2][2];
inline void clear() {//矩阵清空
memset(a, 0, sizeof(a));
}
inline void init() {//单位矩阵
memset(a, 0, sizeof(a));
for (int i = 0; i < 2; i++)
a[i][i] = 1;
}
};
LL n, p, q, a1, a2, mod;
Matrix F, a, ans;
inline LL Plus(LL x, LL y) {
x += y;
if (x >= mod) x -= mod;
return x;
}
inline LL power(LL x, LL y) {//快速幂
LL ret = 0;
while (y) {
if (y & 1) ret = (ret + x) % mod;
x = (x + x) % mod;
y >>= 1;
}
return ret;
}
Matrix operator * (Matrix a, Matrix b) {//矩阵乘法
Matrix ret;
ret.clear();
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
ret.a[i][j] = Plus(ret.a[i][j] % mod, power(a.a[i][k], b.a[k][j])% mod) % mod;
return ret;
}
inline Matrix Matrix_Power(Matrix a, LL x) {//矩阵快速幂
Matrix ret;
ret.init();
while (x) {
if (x & 1) ret = ret * a;
x >>= 1;
a = a * a;
}
return ret;
}
int main() {
scanf("%lld%lld%lld%lld%lld%lld", &q, &p, &a1, &a2, &n, &mod);
F.a[0][0] = a1, F.a[0][1] = a2;
a.a[0][0] = 0, a.a[1][0] = 1, a.a[0][1] = p; a.a[1][1] = q;
ans = F * Matrix_Power(a, n - 2);
printf("%lld\n", ans.a[0][1] % mod);
return 0;
}
「Luogu 1349」广义斐波那契数列的更多相关文章
- Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)
Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...
- 洛谷P1349 广义斐波那契数列(矩阵快速幂)
P1349 广义斐波那契数列 https://www.luogu.org/problemnew/show/P1349 题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定 ...
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...
- 矩阵乘法快速幂 codevs 1574 广义斐波那契数列
codevs 1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如 ...
- HDU 5451 广义斐波那契数列
这道题目可以先转化: 令f(1) = 5+2√6 f(2) = f(1)*(5+2√6) ... f(n) = f(n-1)*(5+2√6) f(n) = f(n-1)*(10-(5-2√6)) = ...
- P1349 广义斐波那契数列(矩阵加速)
P1349 广义斐波那契数列 题目描述 广义的斐波那契数列是指形如an=pan-1+qan-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an ...
- 洛谷——P1349 广义斐波那契数列(矩阵加速)
P1349 广义斐波那契数列 题目描述 广义的斐波那契数列是指形如$an=p\times a_{n-1}+q\times a_{n-2}$?的数列.今给定数列的两系数$p$和$q$,以及数列的最前两项 ...
- codevs1574广义斐波那契数列
1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如an=p* ...
- P1349 广义斐波那契数列(矩阵乘法)
题目 P1349 广义斐波那契数列 解析 把普通的矩阵乘法求斐波那契数列改一改,随便一推就出来了 \[\begin{bmatrix}f_2\\f_1 \end{bmatrix}\begin{bmatr ...
随机推荐
- C# ManualResetEvent用法
ManualResetEvent表示线程同步事件,可以对所有进行等待的线程进行统一管理(收到信号时必须手动重置该事件) 其构造函数为: public ManualResetEvent (bool in ...
- IMongoQuery的使用-C#
一.Mongodb的IMongoQuery的使用 引用命名空间:MongoDB.Driver;MongoDB.Driver.Builders; Query.All("name", ...
- MacOS 导入MySQLdb 报错解决思路(解决ImportError: this is MySQLdb version (1, 2, 3, 'beta', 1), but _mysql is version (1, 2, 5, 'final', 1))
cd /Library/Python/2.7/site-packages ls rm -rf MySQL_python-1.2.5-py2.7.egg-info 然后重新import 即可
- bugku猫片
这个猫片思路清奇,真的让我长知识了. 开局一只猫,挺可爱的. 拿到图片,老套路来一波,首先 winhex打开是正常png图片,binwalk ,stegslove都没有任何收获. 折腾了好久没有任 ...
- 我眼中的如何成为一名合格的PHP高级开发工程师
转眼间搞PHP已超过10年准确的说12年,混在帝都,也经历过大公司小公司,有个同行朋友问我,我就思考下,如何成为一名合格的PHP高级开发 所有的所有仅限综合知识,因为PHP其实内容也很多,有的人专门研 ...
- RF读取excel
pip install robotframework-ExcelLibrary (安装ExcelLibrary库) 关键字: Open Excel 打开excel Get Column Count 获 ...
- 渗透测试-基于白名单执行payload--Csc
复现亮神课程 基于白名单执行payload--csc 0x01 Csc.exe C#的在Windows平台下的编译器名称是Csc.exe,如果你的.NET FrameWork SDK安装在C盘,那么你 ...
- 【Redis】Could not get a resource from the pool 实乃集群配置问题
先说些题外话~自上次确诊为鼻窦炎+过敏性鼻炎到现在已经一个月了,最初那会,从下午到晚上头疼难忍.大概是积劳成疾,以前流鼻涕.打喷嚏的时候从来没有注意过,结果病根一下爆发. 关键在于锁定问题,开始治疗一 ...
- linux-32位-交叉编译openssl
下载 openssl-1.1.0i.tar.gz ./config no-asm shared –prefix=/usr/local/openssl –cross-compile-prefix=arm ...
- Redis 消息队列的实现
概述 Redis实现消息队列有两种形式: 广播订阅模式:基于Redis的 Pub/Sub 机制,一旦有客户端往某个key里面 publish一个消息,所有subscribe的客户端都会触发事件 集群订 ...