Fibonacci数列(矩阵乘法快速幂)
2016-10-25 19:51
337 查看
题目描述:
定义:f0=f1=1, fn=fn-1+fn-2(n>=2)。{fi}称为Fibonacci数列。
输入n,求fn mod q。其中1<=q<=30000。
输入描述:
第一行一个数T(1<=T<=10000)。
以下T行,每行两个数,n,q(n<=109, 1<=q<=30000)
输出描述:
文件包含T行,每行对应一个答案。
样例输入:
3
6 2
7 3
7 11
样例输出:
1
0
10
数据范围及提示:
1<=T<=10000
n<=109, 1<=q<=30000
思路:
f(n) 是第n项的值。
f(1)=1;f(2)=1;
f(n)=f(n-1)+(n-2)
问题的求解就变成求转移矩阵的n-1次幂而求幂可使用快速幂。
定义:f0=f1=1, fn=fn-1+fn-2(n>=2)。{fi}称为Fibonacci数列。
输入n,求fn mod q。其中1<=q<=30000。
输入描述:
第一行一个数T(1<=T<=10000)。
以下T行,每行两个数,n,q(n<=109, 1<=q<=30000)
输出描述:
文件包含T行,每行对应一个答案。
样例输入:
3
6 2
7 3
7 11
样例输出:
1
0
10
数据范围及提示:
1<=T<=10000
n<=109, 1<=q<=30000
思路:
f(n) 是第n项的值。
f(1)=1;f(2)=1;
f(n)=f(n-1)+(n-2)
问题的求解就变成求转移矩阵的n-1次幂而求幂可使用快速幂。
#include<iostream> using namespace std; int a,b; int zy[3][3]={{0,0,0},{0,1,1},{0,1,0}}; int fz[3][3]={{0,0,0},{0,1,1},{0,1,0}}; int mb[2][2]; int zyy(int s1[3][3],int s2[3][3]) { int t[3][3]={0}; for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) { for (int k=1;k<=2;++k) { t[i][j]=(t[i][j]+s1[i][k]*s2[k][j]%b)%b; } } for (int i=1;i<=2;++i) for (int j=1;j<=2;++j) s1[i][j]=t[i][j]; } int js() { mb[1][1]=zy[1][1]+zy[1][2]; } int ksm(int x) { while (x) { if (x&1) zyy(zy,fz); zyy(fz,fz); x>>=1; } } int main() { int m; cin>>m; while (m>0) { --m; zy[1][1]=1,zy[1][2]=1; zy[2][1]=1,zy[2][2]=0; fz[1][1]=1,fz[1][2]=1; fz[2][1]=1,fz[2][2]=0; mb[1][1]=1; mb[2][1]=1; cin>>a>>b; if (a==1) { cout<<1;return 0; } ksm(a-2); js(); cout<<mb[1][1]%b<<endl; } }
相关文章推荐
- Fibonacci数列(矩阵乘法快速幂)
- 1250 Fibonacci数列(矩阵乘法快速幂)
- hdu 5451 Best Solver 快速矩阵乘法 Fibonacci数列的循环节
- 矩阵乘法快速幂 codevs 1250 Fibonacci数列
- 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2
- 快速幂模板 -->加法快速幂+乘法快速幂+矩阵快速幂
- 蓝桥杯 BASIC_17 矩阵乘法 (矩阵快速幂)
- Strassen矩阵乘法 + 快速计算乘方的算法 + 矩阵的次幂
- 【模板】【代数】矩阵乘法和矩阵快速幂
- poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化
- 矩阵乘法以及矩阵快速幂模板
- 【矩阵乘法+快速幂】数学序列
- zoj 3563 Alice's Sequence II__ZOJ Monthly, December 2011__矩阵的乘法和二进制快速幂
- hdu 5607 graph (矩阵乘法快速幂)
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- T解 POJ-3233 [矩阵快速幂][矩阵乘法][二分求解]
- 矩阵快速乘法---代码
- ACM 矩阵乘法模板(T_T)+快速幂
- [WIKIOI 1250]Fibonacci数列(数论+数学+矩阵乘法+二分快速幂)
- Tr A(矩阵乘法快速幂)