HDU1588Gauss Fibonacci(矩阵)
来源:互联网 发布:首届编程杯冠军 编辑:程序博客网 时间:2024/05/21 08:03
Gauss Fibonacci
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2076 Accepted Submission(s): 898
Problem Description
Without expecting, Angel replied quickly.She says: "I'v heard that you'r a very clever boy. So if you wanna me be your GF, you should solve the problem called GF~. "
How good an opportunity that Gardon can not give up! The "Problem GF" told by Angel is actually "Gauss Fibonacci".
As we know ,Gauss is the famous mathematician who worked out the sum from 1 to 100 very quickly, and Fibonacci is the crazy man who invented some numbers.
Arithmetic progression:
g(i)=k*i+b;
We assume k and b are both non-nagetive integers.
Fibonacci Numbers:
f(0)=0
f(1)=1
f(n)=f(n-1)+f(n-2) (n>=2)
The Gauss Fibonacci problem is described as follows:
Given k,b,n ,calculate the sum of every f(g(i)) for 0<=i<n
The answer may be very large, so you should divide this answer by M and just output the remainder instead.
How good an opportunity that Gardon can not give up! The "Problem GF" told by Angel is actually "Gauss Fibonacci".
As we know ,Gauss is the famous mathematician who worked out the sum from 1 to 100 very quickly, and Fibonacci is the crazy man who invented some numbers.
Arithmetic progression:
g(i)=k*i+b;
We assume k and b are both non-nagetive integers.
Fibonacci Numbers:
f(0)=0
f(1)=1
f(n)=f(n-1)+f(n-2) (n>=2)
The Gauss Fibonacci problem is described as follows:
Given k,b,n ,calculate the sum of every f(g(i)) for 0<=i<n
The answer may be very large, so you should divide this answer by M and just output the remainder instead.
Input
The input contains serveral lines. For each line there are four non-nagetive integers: k,b,n,M
Each of them will not exceed 1,000,000,000.
Each of them will not exceed 1,000,000,000.
Output
For each line input, out the value described above.
Sample Input
2 1 4 1002 0 4 100
Sample Output
2112分析:列出前n项分别为f(b),f(k+b),f(2*k+b)......f((n-1)*k+b)结合斐波那契数列设A为斐波那契数列的递推矩阵则原式课化为A^b(E,A^k,A^2K,......A^(n-1)k)*(0,1);设R=A^k 原式课化为 A^b(E,R^,R^2,......R^(n-1))*(0,1)P=R,E ,p^n 右上角的子矩阵为 E,R^,R^2,......R^(n-1)0,E剩下的事情就很简单了。代码如下:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N =4;int k,b,n,M;struct matrix{ long long m[4][4];};matrix I={ 1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1};matrix multi(matrix a,matrix b){ matrix c; for(int i=0;i<N;i++) for(int j=0;j<N;j++){ c.m[i][j]=0; for(int k=0;k<N;k++) c.m[i][j]+=(a.m[i][k]%M*b.m[k][j]%M)%M; c.m[i][j]%=M; } return c;}matrix pow(matrix A,int k){ matrix ans=I,p=A; while(k){ if(k&1){ ans=multi(ans,p); k--; } k>>=1; p=multi(p,p); } return ans;}int main(){ while(cin>>k>>b>>n>>M){ matrix A={ 0,1,0,0, 1,1,0,0, 0,0,0,0, 0,0,0,0 }; matrix B=pow(A,b); matrix R=pow(A,k); matrix W=R; W.m[0][2]=1,W.m[1][3]=1,W.m[2][2]=1,W.m[3][3]=1; matrix Q=pow(W,n); matrix P; for(int i=0;i<N;i++) for(int j=0;j<N;j++) P.m[i][j]=0; P.m[0][0]=Q.m[0][2],P.m[0][1]=Q.m[0][3]; P.m[1][0]=Q.m[1][2],P.m[1][1]=Q.m[1][3]; matrix ans=multi(P,B); cout<<(ans.m[0][1]+M)%M<<endl; /*cout<<"*****B*****"<<endl; for(int i=0;i<N;i++){ for(int j=0;j<N;j++) cout<<B.m[i][j]<<" "; cout<<endl; } cout<<"*****R*****"<<endl; for(int i=0;i<N;i++){ for(int j=0;j<N;j++) cout<<R.m[i][j]<<" "; cout<<endl; } cout<<"*****Q*****"<<endl; for(int i=0;i<N;i++){ for(int j=0;j<N;j++) cout<<Q.m[i][j]<<" "; cout<<endl; } cout<<"*****P*****"<<endl; for(int i=0;i<N;i++){ for(int j=0;j<N;j++) cout<<P.m[i][j]<<" "; cout<<endl; }*/ } return 0;}
0 0
- HDU1588Gauss Fibonacci(矩阵)
- 矩阵 Fibonacci
- Fibonacci 矩阵乘法
- 3070 Fibonacci 矩阵乘法
- fibonacci构造矩阵-总结
- POJ 3070 Fibonacci (矩阵)
- 【矩阵快速幂】Fibonacci
- Fibonacci(矩阵)
- Fibonacci 矩阵快速幂
- Fibonacci 矩阵快速幂
- 【poj3070】 Fibonacci 【矩阵乘法】
- Fibonacci (矩阵快速幂)
- 【poj3070】Fibonacci(矩阵)
- Fibonacci 快速幂矩阵
- hdu 3117 Fibonacci Numbers(矩阵乘法+fibonacci)
- poj 3070 Fibonacci(矩阵运算)
- HDU1588 Gauss Fibonacci 矩阵应用
- fibonacci数列的矩阵算法
- 【leetcode】Surrounded Regions
- UVA 156 (暑假-排序、检索(2)-A-Ananagrams)
- socket通信简介
- 二:Openfire的安装配置和Web管理
- 球迷也爱家,世界杯期间CBD告诉你布沙发清洁攻略
- HDU1588Gauss Fibonacci(矩阵)
- Tomcat6 NIO源码剖析一
- 第146天
- Git远程操作详解
- 不锈钢洁净地漏
- mysql 5.6加强密码强度插件validate_password 的使用
- 一些实用的安卓UI设计工具
- no-ip使用教程
- 附:1.线性表之顺序存储结构