【洛谷1349】广义斐波那契数列
来源:互联网 发布:淘宝网排名 编辑:程序博客网 时间:2024/06/08 02:26
题面
题目描述
广义的斐波那契数列是指形如an=p*an-1+q*an-2的数列。今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数。
输入输出格式
输入格式:
输入包含一行6个整数。依次是p,q,a1,a2,n,m,其中在p,q,a1,a2整数范围内,n和m在长整数范围内。
输出格式:
输出包含一行一个整数,即an除以m的余数。
输入输出样例
输入样例#1:
1 1 1 1 10 7
输出样例#1:
6
说明
数列第10项是55,除以7的余数为6。
题解
这道题类似于最普通的斐波那契数列的求法
需要使用矩阵快速幂
所以
我们需要求出矩阵T
因此,我们可以直接退出最后结果的表达式
然后直接求解就行了
#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;#define MAX 10#define ll long longll p,q,a1,a2,n,MOD;struct yl//矩阵 { int n;//大小 long long g[MAX][MAX]; }A;yl operator *(yl a,yl b)//定义乘法 { int n=a.n; yl cool; memset(cool.g,0,sizeof(cool.g)); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) for(int k=1;k<=n;++k) cool.g[i][j]=(cool.g[i][j]+1ll*a.g[i][k]*b.g[k][j]%MOD)%MOD; cool.n=n; return cool;}void write(yl a){ int n=a.n; for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) cout<<a.g[i][j]<<' '; cout<<endl; }}yl Pow(yl a,long long b)//a的b次方{ if(b==1)return a; yl s=Pow(a,b/2); s.n=a.n; s=s*s; if(b&1)s=s*a; return s;}int main(){ cin>>p>>q>>a1>>a2>>n>>MOD; A.n=2; A.g[1][1]=p;A.g[1][2]=1; A.g[2][1]=q;A.g[2][2]=0; yl S=Pow(A,n-2); A.g[1][1]=a2;A.g[1][2]=a1; A.g[2][1]=A.g[2][2]=0; A=A*S; cout<<(A.g[1][1])%MOD<<endl; return 0;}
阅读全文
0 0
- 洛谷1349 广义斐波那契数列 【矩阵乘法】
- 【洛谷1349】广义斐波那契数列
- 【u021】广义斐波那契数列
- P1349 广义斐波那契数列
- P1349 广义斐波那契数列
- [P1349]广义斐波那契数列
- Codevs 1574 广义斐波那契数列(矩阵乘法)
- 【矩阵乘法】广义斐波那契数列
- 1005 Number Sequence(广义斐波那契数列)
- P1349 广义斐波那契数列(矩阵的应用)
- 斐波那契数列数列计算
- 【洛谷1962】 斐波那契数列
- 洛谷P1962 斐波那契数列
- 洛谷P1962 斐波那契数列
- 洛谷P1962 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- 斐波那契数列
- SQL常用语句总结
- Oracle数据库导入导出emp文件
- js的小知识
- Linux C++的多线程编程
- [算法导论]在一个数组中寻找最大值和最小值所需要进行比较的次数
- 【洛谷1349】广义斐波那契数列
- iOS登录界面和登录验证
- myeclipse2014破解
- 【Algothrim】 数据库的增删查改
- Fitnesse slim框架的DecisionTable类自动保存实例变量到fitnesse变量存储中
- C#获取本机MAC地址
- HCNA综合实验,做对就送现金!
- hdu 1007 Quoit Design 最近点对 枚举 二分优化
- Vue路由开启keep-alive时的注意点