题目

P1349 广义斐波那契数列

解析

把普通的矩阵乘法求斐波那契数列改一改,随便一推就出来了

\[\begin{bmatrix}f_2\\f_1
\end{bmatrix}\begin{bmatrix}
p&q\\
1&0\\
\end{bmatrix}^{n-2}=\begin{bmatrix}f_n\\f_{n-1}
\end{bmatrix}\]

水题

代码

#include <bits/stdc++.h>
#define int long long using namespace std; const int N = 100; int n, m, a1, a2, p, q; struct matrix {
int a[N][N];
matrix() {
memset(a, 0, sizeof a);
} void InitMatrix() {
a[1][1] = p, a[1][2] = q;
a[2][1] = 1;
} matrix operator * (const matrix &oth) const {
matrix ans;
for (int k = 1; k <= 2; ++k)
for (int i = 1; i <= 2; ++i)
for (int j = 1; j <= 2; ++j)
ans.a[i][j] = (ans.a[i][j] + (a[i][k] * oth.a[k][j]) % m) % m;
return ans;
} } init; matrix qpow(matrix a, int b) {
matrix ans = init;
while (b) {
if (b & 1) ans = ans * a;
b >>= 1, a = a * a;
}
return ans;
} template<class T>inline void read(T &x) {
x = 0; int f = 0; char ch = getchar();
for ( ; !isdigit(ch); ch = getchar()) f |= (ch == '-');
for ( ; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
x = f ? -x : x;
return;
} signed main() {
read(p), read(q), read(a1), read(a2), read(n), read(m);
if (n <= 2) {
printf("%lld", n == 1 ? a1 : a2);
return 0;
}
init.InitMatrix();
init = qpow(init, n - 3);
printf("%lld\n", (a2 * init.a[1][1] + a1 * init.a[1][2]) % m);
return 0;
}

P1349 广义斐波那契数列(矩阵乘法)的更多相关文章

  1. 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]

    P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...

  2. P1349 广义斐波那契数列(矩阵加速)

    P1349 广义斐波那契数列 题目描述 广义的斐波那契数列是指形如an=pan-1+qan-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an ...

  3. Codevs 1574 广义斐波那契数列(矩阵乘法)

    1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如an=p*an-1+q* ...

  4. 洛谷P1349 广义斐波那契数列(矩阵快速幂)

    P1349 广义斐波那契数列 https://www.luogu.org/problemnew/show/P1349 题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定 ...

  5. 洛谷——P1349 广义斐波那契数列(矩阵加速)

    P1349 广义斐波那契数列 题目描述 广义的斐波那契数列是指形如$an=p\times a_{n-1}+q\times a_{n-2}$?的数列.今给定数列的两系数$p$和$q$,以及数列的最前两项 ...

  6. 斐波那契数列 矩阵乘法优化DP

    斐波那契数列 矩阵乘法优化DP 求\(f(n) \%1000000007​\),\(n\le 10^{18}​\) 矩阵乘法:\(i\times k\)的矩阵\(A\)乘\(k\times j\)的矩 ...

  7. 洛谷——P1349 广义斐波那契数列

    题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. 输入输出格 ...

  8. P1349 广义斐波那契数列

    题目描述 广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. 输入输出格 ...

  9. Luogu P1349 广义斐波那契数列

    解题思路 既然广义斐波那契,而且数据范围这么大,那么我们使用矩阵快速幂来进行求解.大家都知道斐波那契的初始矩阵如下 $$\begin{bmatrix}1&1\\1&0\end{bmat ...

随机推荐

  1. linux 线程查看 和 Jvm栈线程ID对应

    一.proc查看进程和线程 该方法是个人最为推荐,也最喜欢的一种方法.进程文件下,有几种方式可以获取目前进程开启的进程数. 查看status文件: # cat /proc//status Name: ...

  2. wordpress 本地环境安装

    1. 下载xmapp 2. 安装mysql 3. 启动xmapp的数据库与Apache,通常无法启动原因. mac的先关闭自己的数据库,系统偏好设置-MySQL Apache的端口默认是80,一般会被 ...

  3. docker jenkins 插件安装提速

    公司安装的jenkins 自动布署服务挂了,好像有漏洞一直搞,打算重新安装一个,随便再学习一下 一上来就用docker 解决问题 #!/bin/bash docker stop myjenkins d ...

  4. 使用Alibaba的Nacos做为SpringCloud的注册和配置中心,并结合Sentinel+Nocos动态进行限流熔断

    最近在学习阿里的Nacos组件以及Sentinel组件,折腾出了一个小demo. Git地址:https://github.com/yangzhilong/nacos-client 有兴趣的小伙伴可以 ...

  5. unix_timestamp 时间戳函数用法(hive)

    pandas和SQL数据分析实战 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&sha ...

  6. easyui datagrid的行编辑器editor 如何实现新增时可修改,编辑时,不可修改

    项目出现一个需求,要求用户界面的用户名,新增时,可自由输入,编辑时,不可修改 html页面 <table id="gridlist" data-bind="data ...

  7. sumdoc t411 dir.txt

    C:\Users\zhoufeiyue\Documents\sumdoc t411\(9+条消息)redis Jedis存取list对象和map - shenjianxz的博客 - CSDN博客.mh ...

  8. CVI中调用VC动态库

    1.在VC环境中建立新工程,创建32位动态库(Win32 Dynamic-Link Library)  -> A simple DLL project 2.在工程中可加入别的动态库,在工程菜单中 ...

  9. vue遇到组件数据变更了,但是不渲染的问题

    要绑定key,key改变,会触发组件重新渲染

  10. (CSDN 迁移) JAVA多线程实现-支持定时与周期性任务的线程池(newScheduledThreadPool)

    前几篇文章中分别介绍了 单线程化线程池(newSingleThreadExecutor) 可控最大并发数线程池(newFixedThreadPool) 可回收缓存线程池(newCachedThread ...