codevs 1250 Fibonacci数列(矩阵快速幂)
2017-05-31 19:29
357 查看
题目描述 Description
定义:f0=f1=1, fn=fn-1+fn-2(n>=2)。{fi}称为Fibonacci数列。
输入n,求fn mod q。其中1<=q<=30000。
输入描述 Input Description
第一行一个数T(1<=T<=10000)。
以下T行,每行两个数,n,q(n<=109, 1<=q<=30000)
输出描述 Output Description
文件包含T行,每行对应一个答案。
样例输入 Sample Input
3
6 2
7 3
7 11
样例输出 Sample Output
1
0
10
数据范围及提示 Data Size & Hint
1<=T<=10000
n<=109, 1<=q<=30000
思路:f(n) 是第n项的值。
f(1)=1;f(2)=1;
f(n)=f(n-1)+(n-2)
问题的求解就变成求
的问题,而求幂可使用快速幂。
代码如下
定义:f0=f1=1, fn=fn-1+fn-2(n>=2)。{fi}称为Fibonacci数列。
输入n,求fn mod q。其中1<=q<=30000。
输入描述 Input Description
第一行一个数T(1<=T<=10000)。
以下T行,每行两个数,n,q(n<=109, 1<=q<=30000)
输出描述 Output Description
文件包含T行,每行对应一个答案。
样例输入 Sample Input
3
6 2
7 3
7 11
样例输出 Sample Output
1
0
10
数据范围及提示 Data Size & Hint
1<=T<=10000
n<=109, 1<=q<=30000
思路:f(n) 是第n项的值。
f(1)=1;f(2)=1;
f(n)=f(n-1)+(n-2)
问题的求解就变成求
的问题,而求幂可使用快速幂。
代码如下
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define LL long long int using namespace std; int n,mod,ans[3][3],a[3][3]; void mul(int s1[3][3],int s2[3][3]) { int tmp[3][3]={0}; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) for(int k=1;k<=2;k++) tmp[i][j]=(tmp[i][j]+s1[i][k]*s2[k][j]%mod)%mod; for(int i=1;i<=2;i++) for(int j=1;j<=2;j++) s1[i][j]=tmp[i][j]; } void quick_power(int n) { while(n) { if(n&1) mul(ans,a); mul(a,a); n>>=1; } } int main() { int T; scanf("%d",&T); while(T--) { a[1][1]=1,a[1][2]=1; a[2][1]=1,a[2][2]=0; ans[1][1]=1,ans[1][2]=1; ans[2][1]=1,ans[2][2]=0; cin>>n>>mod; quick_power(n-1); cout<<ans[1][1]%mod<<endl; } }
相关文章推荐
- 【codevs 1250】Fibonacci数列(矩阵快速幂)
- 1250 Fibonacci数列(矩阵乘法快速幂)
- Codevs_P1250 Fibonacci数列(矩阵快速幂)
- 矩阵乘法快速幂 codevs 1250 Fibonacci数列
- 【codevs1732】Fibonacci数列 2(矩阵快速幂)
- 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2
- Codevs_P1732 Fibonacci数列 2(矩阵快速幂)
- CODEVS1533 Fibonacci数列 (矩阵乘法)
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- 【数论】矩阵快速幂求Fibonacci数列
- Codevs 1250、1732 矩阵 快速幂
- fibonacci数列矩阵快速幂
- poj 3070 <矩阵快速幂【模板】求Fibonacci数列>
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数
- codevs 1250(矩阵快速幂)
- 【codevs1250】Fibonacci数列,矩阵乘法入门
- nyoj 148 fibonacci数列(二)(矩阵快速幂)
- POJ-3070Fibonacci(矩阵快速幂求Fibonacci数列)