Fibonacci sequence 纪中 1240 矩阵乘法
2016-07-12 17:07
555 查看
分析
这就是裸的矩阵乘法啊!!!数列f
=f[n-1]+f[n-2],f[1]=f[2]=1的前n项和s
的快速求法
0 1 0
1 1 1
0 0 1
代码
const a1:array[1..3,1..3] of int64=((0,1,0), (1,1,1), (0,0,1)); f:array[1..3] of int64=(1,1,1); type arr=array[1..3,1..3] of int64; var a:arr; b:array[1..10] of int64; i,j,k:longint; n,n1:int64; m:longint; ans:longint; function cheng(x,x1:arr):arr; var i,j,k:longint; begin fillchar(cheng,sizeof(cheng),0); for i:=1 to 3 do for j:=1 to 3 do for k:=1 to 3 do cheng[i,j]:=(cheng[i,j]+x[i,k]*x1[k,j]) mod 10000; end; function seach(n:int64):arr; var i,j,k:longint; an:arr; begin fillchar(an,sizeof(an),0); if n<>1 then if n mod 2=0 then begin an:=seach(n div 2); seach:=cheng(an,an); end else begin an:=seach(n div 2); an:=cheng(an,an); seach:=cheng(an,a1); end else seach:=a1; end; begin readln(m); for i:=1 to m do begin read(n,n1); n:=n-2; n1:=n1-1; ans:=0; fillchar(b,sizeof(b),0); if n>0 then begin a:=seach(n); for j:=1 to 3 do for k:=1 to 3 do b[j]:=(b[j]+f[k]*a[k,j]) mod 10000; ans:=b[3] mod 10000; end else if n<>-1 then ans:=1; n:=n1; fillchar(b,sizeof(b),0); if n>0 then begin a:=seach(n); for j:=1 to 3 do for k:=1 to 3 do b[j]:=(b[j]+f[k]*a[k,j]) mod 10000; ans:=b[3] mod 10000-ans; end else if n<>-1 then ans:=1-ans; if ans<0 then ans:=ans+10000; writeln(ans); end; end.
相关文章推荐
- 在Android Studio中进行单元测试和UI测试
- Android Ui卡顿检测
- Fibonacci sequence_纪中1240_矩阵乘法
- easyui datagrid 部分参数整理
- MUI组件一:折叠面板、操作表、数字角标、按钮和卡片视图
- 如何截取scrollView里面的图片
- UITableView回调和table相关成员方法详解
- Congruence relation 同余关系
- deep learning---利用caffe在vgg-face上finetuing自己的人脸数据
- NGUIkeng
- vue-router学习思维导图
- 嵌入式GUI方案选择
- 安卓侧滑菜单搭建-drawerlayout
- 软键盘实例 request参数修改
- datebox清除按钮,datebox加上清除按钮,easyui datebox加上清除按钮
- android -- 蓝牙 bluetooth (五)接电话与听音乐
- RichFaces Developer Guide 3.3.3(6-6)
- 347. Top K Frequent Elements
- android -- 蓝牙 bluetooth (四)OPP文件传输
- android -- 蓝牙 bluetooth (三)搜索蓝牙