Fibonacci sequence_纪中1240_矩阵乘法
2016-07-12 16:59
495 查看
好懒好懒,直接放图
题解:
看到很水啊就直接做了先是直接上递推,结果好像不行
矩阵乘法硬上结果忘了考虑前一个数mod10000小于后一个数的情况,wa*n
代码
type arr=array[1..3,1..3] of longint; const matrix:array[1..3,1..3] of longint=((0,1,0),(1,1,1),(0,0,1)); f:array[1..3]of longint=(1,1,1); p=10000; var a:arr; b:array[1..3] of longint; j,k,n,m,t,ans:longint; function cal(x,x1:arr):arr; var i,j,k:longint; begin fillchar(cal,sizeof(cal),0); for i:=1 to 3 do for j:=1 to 3 do for k:=1 to 3 do cal[i,j]:=(cal[i,j]+x[i,k]mod p*x1[k,j]mod p)mod p; end; function pow(r:longint):arr; var v:arr; begin fillchar(v,sizeof(v),0); if r=1 then exit(matrix); if r and 1=0 then begin v:=pow(r div 2); pow:=cal(v,v); end else begin v:=pow(r div 2); v:=cal(v,v); pow:=cal(v,matrix); end end; begin readln(t); while t>0 do begin readln(n,m); dec(n,2); dec(t); dec(m); ans:=0; fillchar(b,sizeof(b),0); if n=0 then ans:=1 else if n>0 then begin a:=pow(n); for j:=1 to 3 do for k:=1 to 3 do b[j]:=(b[j]+f[k]mod p*a[k,j]mod p) mod p; ans:=b[3]mod p; end; fillchar(b,sizeof(b),0); a:=pow(m); for j:=1 to 3 do for k:=1 to 3 do b[j]:=(b[j]+f[k]mod p*a[k,j]mod p)mod p; ans:=(b[3]mod p-ans)mod p; while ans<0 do ans:=ans+p; writeln(ans); end; end.
相关文章推荐
- 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 (三)搜索蓝牙
- UE4使用widget创建UI界面播放视频
- u3d第一发使用ugui完成消灭星星游戏(一)
- UE4使用widget创建UI界面播放视频