POJ Fibonacii (矩阵快速幂)
2016-02-01 22:29
267 查看
点击打开链接
这道题矩阵base^n 所得新的矩阵的右上角的值就是斐波那契数列第n项的值,但由于数比较大,所以要一直取模。
这道题的程序可以当作模板使用,其中矩阵是用结构体封装的,可以使代码更加简洁。
这道题矩阵base^n 所得新的矩阵的右上角的值就是斐波那契数列第n项的值,但由于数比较大,所以要一直取模。
这道题的程序可以当作模板使用,其中矩阵是用结构体封装的,可以使代码更加简洁。
#include<cstdio> #include<iostream> #include<cstring> using namespace std; struct matrix{ int a[2][2]; }ans,base; const int MOD = 1e4; matrix multiply(matrix x, matrix y) { matrix tmp; for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) { tmp.a[i][j] = 0; for (int k = 0; k < 2; k++) tmp.a[i][j] = (tmp.a[i][j] + x.a[i][k] * y.a[k][j]) % MOD; } return tmp; } int fast_mod(int n) { while (n) { if (n & 1) ans = multiply(ans, base); base = multiply(base, base); n >>= 1; } return ans.a[0][1]; } int main() { int n; while (scanf("%d", &n) && n != -1) { ans.a[0][0] = 1; ans.a[0][1] = 0; ans.a[1][0] = 0; ans.a[1][1] = 1; // 初始化ans为单位矩阵,单位矩阵乘以任何矩阵等于那个矩阵本身 base.a[0][0] = 1; base.a[0][1] = 1; base.a[1][0] = 1; base.a[1][1] = 0; printf("%d\n", fast_mod(n)); } return 0; }
相关文章推荐
- Python 10.4 struct
- GStreamer中文手册
- 无人值守安装linux
- 矩阵运算的重新理解
- Codeforces Round #311 (Div. 2)(A)贪心
- ubuntu创建快捷方式
- hadoop_7 : MapReduce续
- grep语法和正则表达式
- python学习笔记Day3
- JavaScript 使用
- FTP服务器架设(2)vsftpd 安装
- Win7系统禁止生成Thumbs.db缓存文件的方法
- 《笨办法学Python》 第30课手记
- LoadRunner监控Linux与Windows方法
- 从头认识Spring-1.13 注入properties与null
- sql语法记录 to_date函数和oracle连接写法
- perl weixin 发消息接口 webwxsendmsg
- SQLServer数据库插入记录,获取自增长的主键的值
- Xamarin.Forms之Effects的使用
- 【解题报告】2015ACM/ICPC亚洲区上海站