nyoj148fibonacci数列(二)
来源:互联网 发布:知我是个无法讨好的人 编辑:程序博客网 时间:2024/05/21 10:09
- In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 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.
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:
.
- 输入
- 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.
- 输出
- For each test case, print the last four digits of Fn. If the last four digits of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn mod 10000).
- 样例输入
091000000000-1
- 样例输出
0346875
代码:
#include <cstdio> #include <iostream> #include <vector> using namespace std; typedef vector<int> vec; typedef vector<vec> mat; typedef long long LL; const int N = 10000; mat mul(mat a,mat b) //矩阵乘法 { mat c(a.size(),vec(b[0].size())); for(int i=0;i<a.size();i++) { for(int k=0;k<b.size();k++) { for(int j=0;j<b[0].size();j++) c[i][j] = ( c[i][j] + a[i][k] * b[k][j] ) % N; } } return c; } mat solve_pow(mat a,int n) //快速幂 { mat b(a.size(),vec(a.size())); for(int i=0;i<a.size();i++) b[i][i]=1; while(n>0) { if(n & 1) b=mul(b,a); a=mul(a,a); n >>= 1; } return b; } LL n; void solve() { mat a(2,vec(2)); while(~scanf("%d",&n) && n!=-1) { a[0][0]=1,a[0][1]=1; a[1][0]=1,a[1][1]=0; a=solve_pow(a,n); printf("%d\n",a[1][0]); } } int main() { solve(); return 0; }
0 0
- nyoj148fibonacci数列(二)
- fibonacci数列(二) nylg148
- fibonacci数列(二)
- 数列极限(二)
- nyoj 148 fibonacci数列(二)
- nyoj 148 fibonacci数列(二)
- fibonacci数列(二) nyoj 数学
- NYOJ 148 fibonacci数列(二)
- nyoj-148-fibonacci数列(二)
- nyoj 148 fibonacci数列(二)
- 斐波那契数列法二
- 斐波那契数列(二)
- nyoj fibonacci数列(二) 矩阵乘法
- 13周项目二Fibnacci数列
- 数列通项的求法(二)
- nyoj 148 fibonacci数列(二)【矩阵】
- 【bzoj4282】【慎二的随机数列】【dp】
- 4282: 慎二的随机数列 DP
- vector C++实现
- 在IOS6内使用Twitter
- week 13 练习一的修改版
- 设计模式系列课程21之【策略模式】
- hadoop学习-Netflix电影推荐系统
- nyoj148fibonacci数列(二)
- 中文乱码的解决之道,理清UTF8,UTF16,GB2312,Big5,Unicode之间的关系
- java连接sql server数据库代码
- 2014/5/20翻译
- 分班算法
- 全息影像还原技术使杰克逊复活 再现太空步
- dhtmlx使用
- UI_oneDay
- PLSQL Developer(目前只有32位) 无法连接Oracle 11g 64位 解决方案,3分钟搞定!