博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
25-Fibonacci(矩阵快速幂)
阅读量:5089 次
发布时间:2019-06-13

本文共 2072 字,大约阅读时间需要 6 分钟。

 
 
                                            
Fibonacci
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 17694   Accepted: 12315

Description

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.

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 of Fn are all zeros, print ‘0’; otherwise, omit any leading zeros (i.e., print Fn 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:

.

Source

 
#include 
#include
using namespace std;const int MAX = 2;const int mod = 1e4;struct mat{ int f[MAX][MAX]; mat operator * (const mat x){ //重载矩阵的乘法 mat rt; for(int i = 0; i < MAX; i++){ for(int j = 0; j < MAX; j++){ int ans = 0; for(int m = 0; m < MAX; m++){ ans += (this->f[i][m] * x.f[m][j]) % mod; ans %= mod; } rt.f[i][j] = ans; } } return rt; }}; mat quike(mat base, int n){ //与普通快速幂相似,只是用于存结果的其实值不同,这里用的是rt单位矩阵,类似乘法中设的1 mat rt; memset(rt.f, 0, sizeof(rt.f)); for(int i = 0; i < MAX; i++) rt.f[i][i] = 1; while(n){ if(n & 1) rt = rt * base; base = base * base; n >>= 1; } return rt;}int main(){ int n; mat base; for(int i = 0; i < MAX; i++){ for(int j = 0; j < MAX; j++) base.f[i][j] = 1; } base.f[1][1] = 0; while(cin >> n && n != -1){ mat ans = quike(base, n); cout << ans.f[0][1] << endl; } return 0;}

  

转载于:https://www.cnblogs.com/zhumengdexiaobai/p/8681395.html

你可能感兴趣的文章
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>
2015 Multi-University Training Contest 3
查看>>
使用Gitblit 在windows 上部署你的Git Server
查看>>
217. Contains Duplicate
查看>>
vue2.0 关于Vue实例的生命周期
查看>>
jenkins 更换主数据目录
查看>>
Silverlight中恼人的g.i.cs错误
查看>>
SQLite 数据库增删改查
查看>>
<s:iterator>的status
查看>>
C++入门--1.0输入输出
查看>>