POJ 3070 Fibonacci 矩阵高速求法
就是Fibonacci的矩阵算法。只是添加一点就是由于数字非常大,所以须要取10000模,计算矩阵的时候取模就能够了。
本题数据不强,只是数值本来就限制整数,故此能够0ms秒了。
以下程序十分清晰了,由于分开了几个小函数了。适合刚開始学习的人參考下。
#include <stdio.h> const int MOD = 10000; void mulOneMatrix(int F[2][2])
{
int a = F[0][0];
int b = F[1][0];
F[0][0] = (a+b)%MOD;
F[0][1] = a;
F[1][0] = a;
F[1][1] = b;
} inline void mulMat(int LF[2][2], int RF[2][2])
{
int a = LF[0][0] * RF[0][0] + LF[0][1] * RF[1][0];
int b = LF[0][0] * RF[0][1] + LF[0][1] * RF[1][1];
int c = LF[1][0] * RF[0][0] + LF[1][1] * RF[1][0];
int d = LF[1][0] * RF[0][1] + LF[1][1] * RF[1][1];
LF[0][0] = a%MOD; LF[0][1] = b%MOD; LF[1][0] = c%MOD; LF[1][1] = d%MOD;
} void powMatrix(int F[2][2], int n)
{
if (n <= 1) return; powMatrix(F, n>>1);
mulMat(F, F);
if (n & 1) mulOneMatrix(F);
} int calFibonacci(int n)
{
int F[2][2] = { {1, 1}, {1, 0} };//Fn+1, Fn, Fn, Fn-1
powMatrix(F, n-1);
return F[0][0];
} int main()
{
int n;
while (scanf("%d", &n) && -1 != n)
{
if (n == 0) puts("0");
else printf("%d\n", calFibonacci(n));
}
return 0;
}
POJ 3070 Fibonacci 矩阵高速求法的更多相关文章
- POJ 3070 Fibonacci(矩阵高速功率)
职务地址:POJ 3070 用这个题学会了用矩阵高速幂来高速求斐波那契数. 依据上个公式可知,第1行第2列和第2行第1列的数都是第n个斐波那契数.所以构造矩阵.求高速幂就可以. 代码例如以下: #in ...
- poj 3070 Fibonacci (矩阵快速幂乘/模板)
题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...
- poj 3070 Fibonacci 矩阵快速幂
Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. F ...
- poj 3070 Fibonacci 矩阵相乘
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7715 Accepted: 5474 Descrip ...
- POJ 3070 Fibonacci 矩阵快速幂模板
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18607 Accepted: 12920 Descr ...
- POJ 3070 Fibonacci矩阵快速幂 --斐波那契
题意: 求出斐波那契数列的第n项的后四位数字 思路:f[n]=f[n-1]+f[n-2]递推可得二阶行列式,求第n项则是这个矩阵的n次幂,所以有矩阵快速幂模板,二阶行列式相乘, sum[ i ] [ ...
- 矩阵快速幂 POJ 3070 Fibonacci
题目传送门 /* 矩阵快速幂:求第n项的Fibonacci数,转置矩阵都给出,套个模板就可以了.效率很高啊 */ #include <cstdio> #include <algori ...
- HDU1588-Gauss Fibonacci(矩阵高速幂+等比数列二分求和)
题目链接 题意:g(x) = k * x + b.f(x) 为Fibonacci数列.求f(g(x)),从x = 1到n的数字之和sum.并对m取模. 思路: 设A = |(1, 1),(1, 0) ...
- 矩阵经典题目六:poj 3070 Fibonacci
http://poj.org/problem?id=3070 按已构造好的矩阵,那么该矩阵的n次方的右上角的数便是f[n]. #include <stdio.h> #include < ...
随机推荐
- Oracle12C查询自建用户(非系统自带)
select username from dba_users where INHERITED='NO';
- Dapper基础知识一
在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 1,什么是Dapper? Dapper,.NET下的一种ORM ...
- Fiddler常用配置
过滤目标地址: 抓取https的设置:
- word中输入公式方案
如何开启word公式模式:“Alt”+"=" 1. 如何输入矩阵: 使用&链接行元素,@进行换行,空格键进行转换 如输出: 先开启公式模式:“Alt”+"=&qu ...
- 【Android】把外部文件拷贝的AVD安卓模拟器上的sdcard上,而且在AVD中浏览sdcard的文件
首先.实现这一切的大前提是.你的AVD安卓模拟器,在启动之前.有设置好sdcard的大小,例如以下图.同一时候,你的AVD安卓模拟器,要处于启动状态.否则无法运行例如以下的操作. 这里以<[An ...
- ITOO右击菜单实现
ITOO做了持续了这么长时间,client使用MVC+EF+EasyUI框架,服务端在三层基础上增加WCF服务,后来增加容器,AOP(还没怎么接触),封装了在我们刚開始看来神奇的底层方法,克服了非常多 ...
- android -- 小问题 关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题
关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题: 原因: 首先OnScrollListener是焦点滚动 ...
- C++primer读书笔记11-多态
多态也是C++中的一个重要的方面.多态和动态类型,虚函数本质上是指同样的事情. 1 虚函数 类中的成员函数原型前面加上virtual 表面这个函数是个虚函数.虚函数的目的是为了在继承它的派生类中又一次 ...
- 【数据压缩】JPEG标准与原理解析
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50392230 CSDN-勿在浮沙筑高台 为了满足不同应用的需求,JPEG标准包 ...
- BsonDocument
http://api.mongodb.com/csharp/current/html/T_MongoDB_Bson_BsonDocument.htm 如何取出document中的数据 BsonDocu ...