HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂)
来源:互联网 发布:网络专科学位证有用吗 编辑:程序博客网 时间:2024/05/09 23:00
HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂)
ACM
题目地址:HDU 3117 Fibonacci Numbers
题意:
求第n个斐波那契数的前四位和后四位。
不足8位直接输出。
分析:
前四位有另外一题HDU 1568,用取对的方法来做的。
后四位可以用矩阵快速幂,MOD设成10000就行了。
代码:
/** Author: illuz <iilluzen[at]gmail.com>* Blog: http://blog.csdn.net/hcbbt* File: 3117.cpp* Create Date: 2014-08-04 10:25:26* Descripton: */#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;#define repf(i,a,b) for(int i=(a);i<=(b);i++)typedef long long ll;const int N = 41;const int SIZE = 2; // max size of the matrixconst int MOD = 10000;ll n;ll tab[N];double ans;struct Mat{ int n; ll v[SIZE][SIZE]; // value of matrix Mat(int _n = SIZE) { n = _n; memset(v, 0, sizeof(v)); } void init(ll _v) { repf (i, 0, n - 1) v[i][i] = _v; } void output() { repf (i, 0, n - 1) { repf (j, 0, n - 1) printf("%lld ", v[i][j]); puts(""); } puts(""); }} a, b;Mat operator * (Mat a, Mat b) { Mat c(a.n); repf (i, 0, a.n - 1) { repf (j, 0, a.n - 1) { c.v[i][j] = 0; repf (k, 0, a.n - 1) { c.v[i][j] += (a.v[i][k] * b.v[k][j]) % MOD; c.v[i][j] %= MOD; } } } return c;}Mat operator ^ (Mat a, ll k) { Mat c(a.n); c.init(1); while (k) { if (k&1) c = a * c; a = a * a; k >>= 1; } return c;}double fib(int x) { return -0.5 * log(5.0) / log(10.0) + ( (double)n) * log((sqrt(5.0) + 1) / 2) / log(10.0);}void table() { // table tab[0] = 0; tab[1] = 1; repf (i, 2, 40) tab[i] = tab[i - 1] + tab[i - 2];}void pre4(int n) { ans = fib(n); ans -= floor(ans); ans = pow(10.0, ans); while (ans < 1000) ans *= 10; printf("%d", (int)ans);}void last4(int n) { a.init(0); a.v[0][0] = a.v[0][1] = a.v[1][0] = 1; b = a ^ (n - 1); printf("%04lld\n", b.v[0][0]);}int main() { table(); while (~scanf("%lld", &n)) { if (n < 40) { printf("%lld\n", tab[n]); continue; } pre4(n); printf("..."); last4(n); } return 0;}
0 2
- HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂)
- HDU 3117 Fibonacci Numbers(斐波那契数列通项+矩阵快速幂)
- HDU - 3117 Fibonacci Numbers 矩阵快速幂 + 取大数前4位
- Sicily 1863. Elegant fibonacci numbers again (斐波那契+矩阵快速幂)
- hdu 1588 Gauss Fibonacci(斐波那契,等比数列求和,矩阵快速幂)
- HDU 3117Fibonacci Numbers(求斐波那契前四位与后四位 数论知识+矩阵快速幂)
- hdu 3117 Fibonacci Numbers 矩阵+斐波那契数列通项公式
- HDU3117 Fibonacci Numbers 求斐波那契的前后4位
- 斐波那契数列 打表+矩阵快速幂
- HDU 3117 Fibonacci Numbers(矩阵快速幂+公式)
- hdu 3117 Fibonacci Numbers 数学 矩阵快速幂
- 快速幂、矩阵快速幂+斐波那契数列(Fibonacci Sequence)
- HDU 1588 Gauss Fibonacci(矩阵 + 斐波那契)
- UVA 11582 Colossal Fibonacci Numbers!(打表+快速幂)
- UVA - 11582 - Colossal Fibonacci Numbers!(快速幂+打表)
- hdu3117 Fibonacci Numbers (矩阵快速幂)
- HDU3117 Fibonacci Numbers(矩阵快速幂)
- 10299 Problem A: Modular Fibonacci(斐波那契的矩阵快速幂)
- STL概论
- POJ 1651 Multiplication Puzzle (区间dp 矩阵连乘)
- HDU 1568 Fibonacci(斐波那契前四位)
- 如何快速构建基于Spring4.0的Rest API
- hiho一下 第四周 Hihocoder #1036 : Trie图
- HDU 3117 Fibonacci Numbers(斐波那契前后四位,打表+取对+矩阵快速幂)
- Cocos2d-x中Lua脚本的加密
- Ubuntu中ckhconfig不能用了,解决办法
- HDU 2254 奥运(矩阵快速幂+二分等比序列求和)
- ganymed-ssh2实现java ssh协议采集
- 使用ganymed ssh2实现scp以及ssh内容访问
- 求条形图中最大矩形的面积的两种算法
- Spring MVC和Struts2的比较的优点
- 猜想 QQ好友分组 (微信好友)多层次分组策略 QQ好友过多