HDU - 3117 Fibonacci Numbers 矩阵快速幂 + 取大数前4位
来源:互联网 发布:方维o2o上门服务 源码 编辑:程序博客网 时间:2024/05/20 20:21
题目大意:要求输出第n个fibonacci数,如果该数超过1e9,就输出该数的前4位和后四位
解题思路:通过打表可得,第40个fibonacci数是大于1e9的,所以40之前的可以直接计算
40之后的比较麻烦,参考了别人的题解
http://blog.sina.com.cn/s/blog_9bf748f301019q3t.html
#include<cstdio>#include<cmath>using namespace std;typedef long long ll;const int N = 2;struct Matrix{ int mat[N][N];}A, B, tmp;int n;Matrix matMul(Matrix x, Matrix y, int mod) { for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) { tmp.mat[i][j] = 0; for(int k = 0; k < N; k++) tmp.mat[i][j] += x.mat[i][k] * y.mat[k][j] % mod; tmp.mat[i][j] %= mod; } return tmp; }void solve(int mod) { while(n) { if(n & 1) B = matMul(B,A,mod); A = matMul(A,A,mod); n >>= 1; }}void init() { B.mat[0][0] = B.mat[1][1] = 1; A.mat[0][0] = A.mat[0][1] = A.mat[1][0] = 1; B.mat[0][1] = B.mat[1][0] = A.mat[1][1] = 0;}int main() { while(scanf("%d", &n) != EOF) { init(); if(n == 0) printf("0\n"); else if(n == 1) printf("1\n"); else { init(); if(n <= 39) { n -= 1; solve(1e9); printf("%d\n", B.mat[0][0]); } else { double t; double s = (sqrt(5.0) + 1.0) / 2; t = -0.5 * log(5.0) / log(10.0) + ((double)n) * log(s)/ log(10.0); t -= floor(t); t = pow(10.0,t); while(t < 1000) t *= 10; n--; solve(10000); printf("%04d...%04d\n", int(t), B.mat[0][0]); } } } return 0;}
0 0
- HDU - 3117 Fibonacci Numbers 矩阵快速幂 + 取大数前4位
- HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂)
- HDU 3117 Fibonacci Numbers(矩阵快速幂+公式)
- hdu 3117 Fibonacci Numbers 数学 矩阵快速幂
- hdu 3117 Fibonacci Numbers(矩阵乘法+fibonacci)
- HDU 3117Fibonacci Numbers(求斐波那契前四位与后四位 数论知识+矩阵快速幂)
- HDU 3117 Fibonacci Numbers(斐波那契数列通项+矩阵快速幂)
- hdu3117 Fibonacci Numbers (矩阵快速幂)
- HDU3117-Fibonacci Numbers(矩阵快速幂+log)
- HDU3117 Fibonacci Numbers(矩阵快速幂)
- 【公式+矩阵快速幂】HDU_3117 Fibonacci Numbers
- HDU 3117 Fibonacci Numbers(Fibonacci矩阵加速递推+公式)
- hdu 1568求斐波那契数的前4位 && hdu3117矩阵快速幂
- [HDU 5451] Best Solver (向下取整+矩阵快速幂+广义Fibonacci降幂)
- HDU 1588 Gauss Fibonacci 矩阵快速幂
- HDU 1588 Gauss Fibonacci(矩阵快速幂)
- 【HDU】1588 Gauss Fibonacci 矩阵快速幂
- HDU3317---Fibonacci Numbers(矩阵快速幂+pow+log)
- Using sudo with an alias
- UVA10900 So you want to be a 2n-aire?(概率dp)
- 在阿里云centos6.5系统上用docker搭建php环境的失败过程
- 音视频播放器源码
- nginx配置失败,卸载后重装出问题 awk: cannot open /etc/nginx/nginx.conf (No such file or directory)
- HDU - 3117 Fibonacci Numbers 矩阵快速幂 + 取大数前4位
- hdoj1003注意在寻找最优解对应的时候寻找的顺序
- HDOJ 1004 Let the Balloon Rise
- CSS页面布局
- 最短路径—Dijkstra算法和Floyd算法
- 一、Java基础知识总结
- nokey属性(输出没有名称的数组)---精通android、IOS App应用服务程序开发
- html5第一个页面。登录加倒计时
- Guava ---- Sets