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 < ...
随机推荐
- 3ds Max实例教程-顽皮的小孩
本教程介绍使用3ds Max制作设计一个顽皮的小孩,这个作品的灵感来源于作者的亲身经历,也是以真实人物为原型做出来这么一个小人. 作者: Claudius Vesting 使用软件:3ds Max,P ...
- 马云谈AI:未来10-15年传统制造业的痛苦将远超今天的想象
马云谈AI:未来10-15年传统制造业的痛苦将远超今天的想象 “未来10到15年,传统制造业面临的痛苦将会远远超过今天的想象,企业如果不能从规模化.标准化向个性化和智慧化转型,将很难生存下去.” 9月 ...
- 叁、js中的css
一.子选择器:用来选择一个父元素直接的子元素,不包括子元素的子元素,它的符号为“>” 注:ie6不支持子代选择器. <!DOCTYPE html PUBLIC "-//W3C// ...
- Vue学习之v-if与v-show的区别
v-if和v-show具有类似的功能,不过v-if才是真正的条件渲染,他会根据表达式适当的销毁或重建元素及绑定事件或子组件.若表达式初始值为false,则一开始元素或组件不会渲染,只有当第一次为真时, ...
- GUI 图形用户界面 [学习笔记]
今晚返璞归真了一把, 系统了解了一下GUI的有关知识: GUI(Graphical User Interface) 图形用户界面 是指采用图形方式显示的计算机操作用户接口.与早期计算机使用的命令行界面 ...
- Mysql学习总结(23)——MySQL统计函数和分组查询
1.使用count统计条数:select count(字段名...) from tablename; 2.使用avg计算字段的平均值:select avg(字段名) from tablename: 这 ...
- [置顶]
Docker学习总结(7)——云端基于Docker的微服务与持续交付实践
本文根据[2016 全球运维大会•深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中 ...
- UILite-MFC/WTL/DirectUI界面库
之前写了UILite库介绍: http://blog.csdn.net/zhangzq86/article/details/9093945 如今UILite库能够使用git訪问了: https://g ...
- Max Points on a Line(直线上最多的点数)
给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | o | ...
- Material Design学习之 Button(具体分析,传说中的水滴动画)
转载请注明出处:王亟亟的大牛之路 上一篇大致介绍了Material Design的一些基本概念传送门:http://blog.csdn.net/ddwhan0123/article/details/5 ...