博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1005 矩阵快速幂
阅读量:5276 次
发布时间:2019-06-14

本文共 1452 字,大约阅读时间需要 4 分钟。

本体有2种方法,一种是矩阵快速幂,一种是找规律。我用的是矩阵快速幂。

f(1)=1; f(2)=1; f(n)=( A*(f(n-1)) + B*(f(n-2)) )mod7;

[ f(n)    ]   = [ A B ]  * [ f(n-1) ]      =>      [ f(n)    ]  = [ A B ] (n-2)  * [ f(1) ]

[ f(n-1) ]      [ 1 0 ]     [ f(n-2) ]      =>      [ f(n-1) ]     [ 1 0 ]               [ f(2)  ]

 

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 struct matrix{ 7 int a[2][2]; 8 }res,temp; 9 matrix mul(matrix a,matrix b){10 matrix t;11 memset(t.a,0,sizeof(t.a));12 int i,j,k;13 for(i=0;i<2;++i)14 for(j=0;j<2;++j)15 for(k=0;k<2;++k){16 t.a[i][j]+=a.a[i][k]*b.a[k][j];17 t.a[i][j]%=7;18 }19 return t;20 }21 int main(){22 int A,B,n,i,j;23 while(~scanf("%d%d%d",&A,&B,&n)){24 if(A==0&&B==0&&n==0) break;25 if(n<=2) {printf("1\n");continue;}26 27 memset(res.a,0,sizeof(res.a));28 res.a[0][0]=res.a[1][1]=1;29 temp.a[0][0]=A;30 temp.a[0][1]=B;31 temp.a[1][0]=1;32 temp.a[1][1]=0;33 n=n-2;34 while(n){35 if(n&1)36 res=mul(res,temp);37 n>>=1;38 temp=mul(temp,temp);39 }40 printf("%d\n",(res.a[0][0]+res.a[0][1])%7 );41 }42 43 return 0;44 45 }

 

posted on
2013-09-03 11:22 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/symons1992/p/3298345.html

你可能感兴趣的文章
centos下同时启动多个tomcat
查看>>
Leetcode Balanced Binary Tree
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
我的Hook学习笔记
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
整理推荐的CSS属性书写顺序
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
0320-学习进度条
查看>>