Yet another Number Sequence UVA - 10689 (矩阵快速幂)
2017-08-18 20:07
519 查看
题目链接:点我
题意:
求f(n) mod m 的值,
思路:
类似与求斐波那契数列(Fibonacci)数列的第n项那样,快速幂即可.
构造递推矩阵为:(1110)
代码:
题意:
求f(n) mod m 的值,
思路:
类似与求斐波那契数列(Fibonacci)数列的第n项那样,快速幂即可.
构造递推矩阵为:(1110)
代码:
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<iostream> using namespace std; int mod[]={1,10,100,1000,10000}; int m; struct mat{ int a[10][10]; mat(){memset(a, 0, sizeof(a)); } mat operator *(const mat q){ mat c; for(int i = 1; i <= 2; ++i) for(int k = 1; k <= 2; ++k) if(a[i][k]) for(int j = 1; j <=2; ++j){ c.a[i][j] += a[i][k] * q.a[k][j]; if(c.a[i][j] >= mod[m]) c.a[i][j] %= mod[m]; }return c; } }; mat qpow(mat x, int n){ mat ans; ans.a[1][1] = ans.a[2][2] = 1; while(n){ if(n&1) ans = ans * x; x= x * x; n >>= 1; }return ans; } int main(){ int a,b,n; int t; scanf("%d", &t); while(t--){ scanf("%d %d %d %d", &a, &b, &n, &m); a %= mod[m]; b %= mod[m]; if(n == 0){ printf("%d\n",a); continue; } else if(n == 1){ printf("%d\n",b); continue; }mat ans; ans.a[1][1] = ans.a[1][2] = ans.a[2][1] = 1; ans = qpow(ans,n-1); printf("%d\n",(ans.a[1][1] * b + ans.a[1][2] * a) % mod[m]); }return 0; }
相关文章推荐
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- UVA - 10689 Yet another Number Sequence 矩阵快速幂
- UVA 10689 Yet another Number Sequence 矩阵快速幂 水呀水
- uva 10689 Yet another Number Sequence【矩阵快速幂】
- UVA 10689 - Yet another Number Sequence(矩阵快速幂)
- uva 10689 - Yet another Number Sequence(矩阵快速幂)
- UVA 10689 Yet another Number Sequence(矩阵快速幂求Fib数列)
- 矩阵的运算 --- 矩阵快速幂(UVA10689 - Yet another Number Sequence)
- UVA 10698 Yet another Number Sequence 矩阵快速幂
- 【矩阵快速幂】UVA 10698 G - Yet another Number Sequence
- UVA-10689 Yet another Number Sequence (矩阵二分幂模板)
- CodeForces 392 C.Yet Another Number Sequence(矩阵快速幂)
- uva10689 Yet another Number Sequence
- Yet Another Number Sequence——[矩阵快速幂]
- UVA 10689 Yet another Number Sequence
- Yet Another Number Sequence CodeForces - 392C 矩阵快速幂
- uva 10689 - Yet another Number Sequence(缓存,类Fibonacci)
- UVA 10689 Yet another Number Sequence(Fibonacci数列)
- UVa 10689 - Yet another Number Sequence
- 7_22_G Yet another Number Sequence(矩阵快速幂)