矩阵快速幂
来源:互联网 发布:算法导论中文第四版pdf 编辑:程序博客网 时间:2024/05/21 10:48
今天又翻到开学初的一个ds上的题目,求斐波那契数列的第n项;
斐波那契有几种求法
1,通项公式:下一项等于前两项的和,其中,F0=0;F1=1;Fn=Fn-1+Fn-2;
2,数列的第n项,等于n个{ 1 1 } 矩阵相乘;
1 0
若一项一项的相乘,为O(n),
使用矩阵快速幂,则为O(logn);
比如n^7=n*n*n*n*n*n*n=(n*n)*(n*n)*(n*n)*n =n^4 * n^2 * n
#include<stdio.h>#include<stdlib.h>struct matrix{int a[2][2];}A,G;void init(){A.a[0][0]=A.a[0][1]=A.a[1][0]=1;A.a[1][1]=0;G.a[0][0]=G.a[1][1]=1;G.a[0][1]=G.a[1][0]=0;}matrix mutiply(matrix x,matrix y) //模拟矩阵乘法{int i,j,k;matrix temp;temp.a[0][0]=temp.a[0][1]=temp.a[1][0]=temp.a[1][1]=0;for(i=0;i<2;i++){for(j=0;j<2;j++){for(k=0;k<2;k++){temp.a[i][j]=temp.a[i][j]+x.a[i][k]*y.a[k][j];temp.a[i][j]=temp.a[i][j]%10000;}}}return temp;}void cals(int n) //矩阵快速幂相乘{while(n){if(n&1){G=mutiply(G,A);//G用于消除奇数项,n--;}n>>=1;A=mutiply(A,A);//A用于快速幂}}int main(){int n,data;init();scanf("%d",&n);cals(n);printf("jieguo=%d",G.a[0][1]);system("pause");return 0;}
0 0
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 快速幂&矩阵快速幂
- 【快速幂】【矩阵快速幂】
- 快速幂和快速矩阵
- poj3070--矩阵 快速幂
- POJ3233矩阵快速幂
- poj3070Fibonacci 矩阵快速幂
- 矩阵的快速幂
- 矩阵快速幂
- 矩阵的快速幂
- 黑马程序员—java基础复习—I/O流
- AS关键字
- docker私有仓库搭建完整记录(git方式)
- linux学习(3)--进程
- 课时2第二章:标识符-关键字-数据类型1
- 矩阵快速幂
- 没有键的json怎么解析?
- iOS plist文件的编辑、XML文件的换行回车等操作
- 黑马程序员—java基础复习—网络编程
- jquery制作一个简单的日历
- ubuntu上用qemu模拟mips, 大端机
- java 静态方法调用非静态内部类报错
- C++11 <regex>
- 2015-12-09