HDU 1005(矩阵乘法)
2014-01-11 13:31
281 查看
A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
题意:给出一个递推公式,求第N项。
题解:开始试图找出一个能够直接算的递推公式,没找到,所以考虑矩阵乘法。根据给出的递推公式可以设想:
可以使用找规律:
使用矩阵相乘:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
题意:给出一个递推公式,求第N项。
题解:开始试图找出一个能够直接算的递推公式,没找到,所以考虑矩阵乘法。根据给出的递推公式可以设想:
可以使用找规律:
#include <iostream> #include <cstring> using namespace std; int f[1000001]; int main() { int a,b,n; while(cin>>a>>b>>n) { if(a==0&&b==0&&n==0) break; f[1]=1; f[2]=1; int xh=0; int i; for(i=3;i<=1001;i++) { f[i]=(a*f[i-1]+b*f[i-2])%7; if(f[i]==1&&f[i-1]==1) { break; } } xh=i-2; n=n%xh; if(n==0)n=xh; cout<<f <<endl; } return 0; }
使用矩阵相乘:
#include <iostream> #include <cstdio> using namespace std; const int N=10001; const __int64 INF = 10e18; typedef struct m { int a[2][2]; }Mat; typedef struct o { int sno; //器官序号 int day; }Cat; Cat cat ; // Mat E;//unit matrix; void InitE(Mat& e) { e.a[0][0]=1; e.a[0][1]=0; e.a[1][0]=0; e.a[1][1]=1; } Mat MatMul(Mat x,Mat y) { int i,j,k; Mat c; for(i=0;i<2;++i) for(j=0;j<2;++j) { c.a[i][j]=0; for(k=0;k<2;++k) { c.a[i][j]+=x.a[i][k] * y.a[k][j]; } c.a[i][j] %=7; } return c; } Mat MatPow(Mat d,int n) //matrix binary divide,calculate n power of matrix a { Mat t=E; while(n>0) { if(n&1) t=MatMul(t,d); d = MatMul(d,d); n>>=1; } return t; } int main() { int p,q,n; while(cin>>p>>q>>n && p|q|n) { if(n<3) cout<<1<<endl; else { InitE(E); //init unit matrix Mat m; m.a[0][0] = p; m.a[0][1] = q; m.a[1][0] = 1; m.a[1][1] = 0; m = MatPow(m,n-2); cout<<(m.a[0][0]+m.a[0][1])%7<<endl; } } return 0; }
相关文章推荐
- HDU 1005 Number Sequence 矩阵乘法 Fib数列
- hdu 1005 矩阵乘法
- HDU1005 - Number Sequence (矩阵快速幂)
- hdu 4602 Partition(矩阵快速幂乘法)
- hdu 1575 Tr A(矩阵乘法)
- 矩阵乘法模板之hdu——1751
- hdu 2294 Pendant(矩阵乘法)
- hdu 1757 A Simple Math Problem(矩阵乘法)
- hdu 1005 矩阵快速幂
- hdu 2276 Kiki & Little Kiki 2(矩阵乘法)
- hdu 2604 Queuing(矩阵快速幂乘法)
- HDU 4920(Matrix multiplication-矩阵乘法优化)
- hdu 4965 Fast Matrix Calculation(矩阵乘法)
- hdu 1005 矩阵快速幂
- Hdu 2157 How many ways??(DP||矩阵乘法)
- HDU 3802 Ipad,IPhone 数论 矩阵乘法
- HDU 4920 Matrix multiplication(矩阵乘法)
- hdu--4920--原来一直写了速度慢的矩阵乘法
- hdu 1757 A Simple Math Problem 矩阵乘法解线性方程
- hdu_1588_矩阵_求和_乘法_快速幂_斐波那契数列求前n项和