hdu-4549 M斐波那契数列【矩阵快速幂】
来源:互联网 发布:政治难民 知乎 编辑:程序博客网 时间:2024/04/29 22:11
找规律写出f(2),f(3),f(4),f(5) .........可以发先 a b的系数是一系列的fib数列 如果可以求出fib数列 求快速幂就可以了 这样问题就在于如何求fib数列了
1 1
【f[n-1],f[n-2]】 * 1 0 = 【f[n],f[n-1]】
当gcd(A,M)==1的时候
A^X = A^( X mod Eular(M) ) ( mod M ) .
A^X = A^( X mod Eular(M) ) ( mod M ) .
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <vector>#define L 2using namespace std;typedef long long int llint;typedef vector<llint> vec;typedef vector<vec> mat;const llint MOD=1000000007;struct Matrix{llint m[L][L];};Matrix matrix_mul(Matrix a,Matrix b){Matrix res;for(int i=0;i<L;++i)for(int j=0;j<L;++j){res.m[i][j]=0;for(int k=0;k<L;++k){res.m[i][j]+=a.m[i][k]*b.m[k][j];res.m[i][j]%=MOD-1;}}return res;}Matrix Mquickpow(Matrix p,llint n){Matrix res;res.m[0][0]=res.m[1][1]=1;res.m[0][1]=res.m[1][0]=0;while(n>0){if(n&1)res=matrix_mul(p,res);n=n>>1;p=matrix_mul(p,p);}return res;}llint quickpow(llint a,llint n){llint res=1;a%=MOD;while(n>0){if(n&1)res=res*a%MOD;n=n>>1;a=a*a%MOD;}return res;}int main(){llint a,b,n;Matrix t;t.m[0][0]=0,t.m[0][1]=t.m[1][0]=t.m[1][1]=1;while(~scanf("%lld%lld%lld",&a,&b,&n)){if(n==0)printf("%lld\n",a%MOD);else if(n==1)printf("%lld\n",b%MOD);else{Matrix res=Mquickpow(t,n-2);llint f0=(res.m[0][0]+res.m[0][1])%(MOD-1);llint f1=(res.m[1][0]+res.m[1][1])%(MOD-1);llint ans=(quickpow(a,f0)%MOD)*(quickpow(b,f1)%MOD);ans%=MOD;printf("%lld\n",ans);}}return 0;}
0 0
- 【矩阵快速幂】HDU 4549 : M斐波那契数列(矩阵嵌套)
- HDU 4549 M斐波那契数列(矩阵快速幂+快速幂+欧拉降幂)
- HDU 4549 M斐波那契数列(费马小定理,矩阵快速幂,快速幂)
- hdu 4549 M斐波那契数列(矩阵快速幂,快速幂降幂)
- HDU 4549 M斐波那契数列 (费马小定理降幂&矩阵快速幂)
- HDU 4549M斐波那契数列(矩阵快速幂+费马小定理)
- HDU - 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列(矩阵快速幂)
- hdu 4549 M斐波那契数列 【矩阵+快速幂+欧拉定理】
- HDU 4549 M斐波那契数列(矩阵快速幂3)+费马小定理
- HDU 4549 M斐波那契数列(矩阵快速幂&费马小定理)
- hdu-4549 M斐波那契数列【矩阵快速幂】
- HDU 4549 M斐波那契数列(矩阵快速幂)(费马小定理)
- HDU --- 4549 M斐波那契数列 【费马小定理+矩阵快速幂】
- HDU 4549 M斐波那契数列(矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列 (矩阵快速幂+费马小定理)
- HDU 4549 M斐波那契数列 (矩阵快速幂 + 费马小定理)
- HDU 4549 M斐波那契数列 (费马小定理+矩阵快速幂)
- Unity 3D——打包复用资源(.unitypackage文件)
- 多线程并发编程(一):传统多线程实现方式
- C#中方法参数的类型
- Tomcat、MySQL注意
- 在 Windows 安裝 PHP PEAR
- hdu-4549 M斐波那契数列【矩阵快速幂】
- 什么是数字签名?
- 五月份--到处溜达
- 数组-冒泡排序
- 地图的集成
- 蜗牛
- android.content.res.Resources$NotFoundException
- Response.Redirect(),Server.Transfer(),Server.Execute()的区别
- SpringMVC处理静态资源