poj3070Fibonacci(矩阵快速幂)
来源:互联网 发布:社交推荐算法 编辑:程序博客网 时间:2024/05/16 04:09
Description
In the Fibonacci integer sequence, F0 = 0, F1 = 1, andFn = Fn − 1 + Fn − 2 forn ≥ 2. For example, the first ten terms of the Fibonacci sequence are:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
An alternative formula for the Fibonacci sequence is
.
Given an integer n, your goal is to compute the last 4 digits of Fn.
Input
The input test file will contain multiple test cases. Each test case consists of a single line containing n (where 0 ≤n ≤ 1,000,000,000). The end-of-file is denoted by a single line containing the number −1.
Output
For each test case, print the last four digits of Fn. If the last four digits ofFn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., printFn mod 10000).
Sample Input
099999999991000000000-1
Sample Output
0346266875
Hint
As a reminder, matrix multiplication is associative, and the product of two 2 × 2 matrices is given by
.
Also, note that raising any 2 × 2 matrix to the 0th power gives the identity matrix:
.
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;int m=10000;struct node{ int m[2][2];}res,x;typedef struct node NODE;NODE mult(NODE a,NODE b){ NODE tmp; for(int i=0;i<2;i++) for(int j=0;j<2;j++) { tmp.m[i][j]=0; for(int k=0;k<2;k++) tmp.m[i][j]=(tmp.m[i][j]+a.m[i][k]*b.m[k][j])%m; } return tmp;}int pow_mod(int n){ res.m[0][0]=res.m[1][1]=1; res.m[0][1]=res.m[1][0]=0; x.m[0][1]=x.m[0][0]=x.m[1][0]=1; x.m[1][1]=0; while(n) { if(n&1) { res=mult(res,x); } x=mult(x,x); n>>=1; } return res.m[0][0];}int main(){ int n; while(scanf("%d",&n)&&n!=-1) { if(n==0) { printf("0\n"); continue; } int ans=pow_mod(n-1); printf("%d\n",ans); } return 0;}这存在个公式,明白这个公式,就知道怎样写了,至于推导过程因为打出来较麻烦,以后有空时我在补充。
- poj3070Fibonacci 矩阵快速幂
- poj3070Fibonacci(矩阵快速幂)
- poj3070Fibonacci【矩阵快速幂】
- POJ3070Fibonacci(矩阵快速幂)(AC)
- poj3070Fibonacci(矩阵快速幂模板)
- poj3070Fibonacci
- POJ3070Fibonacci
- poj3070Fibonacci
- POJ3070Fibonacci
- 快速矩阵快速幂
- 转移矩阵+矩阵快速幂
- 矩阵乘法 矩阵快速幂
- 构造矩阵+矩阵快速幂
- 矩阵快速幂,矩阵加法,矩阵乘法
- 快速幂||矩阵快速幂
- 快速幂&矩阵快速幂
- 快速幂,矩阵快速幂
- 快速幂 矩阵快速幂
- 有一字符串,包含数字与字母,编程去除数字。
- linux--管线命令
- UVA 1422 - Processor (二分+贪心+优先队列)
- 首字母变大写(杭电2026)
- HDU-#1269 迷宫城堡(Tarjan+强连通)
- poj3070Fibonacci(矩阵快速幂)
- java中的环境变量设置---理解
- 数据库基本概念
- PSA: 从数组移除对象
- HDU 1754 I Hate It (线段树)
- 【第三回】使用OCCT做类似AutoCAD的拉伸功能(Extrude)
- poj -- 1417 True Liars(并查集 + dp)
- hdu 1166 敌兵布阵(线段树-单点更新,区间求和)
- 操作系统常见面试题总结