描述

【题解】

用矩阵乘法加速递推

[0 1]

[1 1]

*

[f[n-1]]

[f[n-2]]

[f[n-1]]

[f[n]]

求A矩阵的n-2次幂然后再乘B矩阵。

结果矩阵中的第二行第一列就是f[n]的结果了

【代码】

#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
const int N = 100;
const long long MOD = 1e9+7;
const int G = 2; struct abc{
ll v[G+10][G+10];
void print(){
for (int i = 1;i <= G;i++)
{
for (int j = 1;j <= G;j++)
printf("%I64d ",v[i][j]);
puts("");
}
puts("");
}
void E(){
memset(v,0,sizeof v);
for (int i = 1;i <= G;i++) v[i][i]=1;
}
void O(){
memset(v,0,sizeof v);
}
abc operator * (const abc b) const{
abc temp;temp.O();
for (int i = 1;i <= G;i++)
for (int j = 1;j <= G;j++){
ll sum = 0;
for (int k = 1;k<= G;k++){
sum=(sum+v[i][k]*b.v[k][j])%MOD;
}
temp.v[i][j] = sum;
}
return temp;
} abc operator ^(int n)const{
abc x;x.E();
abc y;memcpy(y.v,v,sizeof(v));
while (n>0){
if (n&1) x=x*y;
y = y*y;
n/=2;
}
return x;
}
}; abc a,b;
int n; int main(){
scanf("%d",&n);
a.O();
a.v[1][1] = 0;a.v[1][2] = 1;
a.v[2][1] = 1;a.v[2][2] = 1;
b.O();
b.v[1][1] = 1;b.v[2][1] = 1;
if (n<=2){
printf("%d\n",1);
}else{
a = a^(n-2);
a = a*b;
printf("%I64d\n",a.v[2][1]);
}
return 0;
}

【历年真题】斐波那契数列logn做法的更多相关文章

  1. NOIP模拟题 斐波那契数列

    题目大意 给定长度为$n$序列$A$,将它划分成尽可能少的若干部分,使得任意部分内两两之和均不为斐波那契数列中的某一项. 题解 不难发现$2\times 10^9$之内的斐波那契数不超过$50$个 先 ...

  2. 【校招面试 之 剑指offer】第10-1题 斐波那契数列

    递归以及非递归实现: #include<iostream> using namespace std; long long fun(long long n){ if(n == 0){ ret ...

  3. 1242 斐波那契数列的第N项

    1242 斐波那契数列的第N项  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   斐波那契数列的定义如下:   F(0) = 0 F(1) = 1 F(n) = F( ...

  4. 用PHP迭代器来实现一个斐波纳契数列(转)

    斐波纳契数列通常做法是用递归实现,当然还有其它的方法.这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次.注释已经写到代码中,也是相当好理解 ...

  5. 用PHP迭代器来实现一个斐波纳契数列

    斐波纳契数列通常做法是用递归实现,当然还有其它的方法.这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次.注释已经写到代码中,也是相当好理解 ...

  6. 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现

    最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...

  7. hdu 2044:一只小蜜蜂...(水题,斐波那契数列)

    一只小蜜蜂... Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...

  8. 51 Nod 1242 斐波那契数列的第N项(矩阵快速幂模板题)

    1242 斐波那契数列的第N项  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) ...

  9. 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)

    I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...

随机推荐

  1. 7、执行 suite 后,result.html 测试报告中,测试结果全部显示为通过原因分析

    测试用例中,断言 异常后,必须 raise 抛出异常, 若无raise ,则测试报告中测试结果全部显示为通过. 抛出后,显示实际测试结果,通过/未通过 __author__ = 'Administra ...

  2. 设置overflow:auto无效的解决办法

    做项目中经常要用到滚动条,有时候给div设置overflow无效. 遇到这样的问题,只需要在 F12 Elements面板检查一下要设置overflow的元素的宽高是否大于父级元素宽高. (overf ...

  3. classmethod和staticmethod

    假设有这么一个 class class Date(object): def __init__(self, day=0, month=0, year=0): self.day = day self.mo ...

  4. leetcode-12双周赛-1243-数组变换

    题目描述: 自己的提交: class Solution: def transformArray(self, arr: List[int]) -> List[int]: if len(arr) & ...

  5. 使用raise语句抛出异常

    #_author:来童星#date:2019/12/18def division(): num1=int(input('请输入被除数:')) num2=int(input('请输入除数:')) if ...

  6. open source library

    { https://gitee.com/tboox https://github.com/thejinchao/cyclone http://www.drchip.org/astronaut/ssl/ ...

  7. 记录一次项目中dubbo-admin实战部署

    环境: 1.centos7 2.jdk-7u76-linux-x64.tar.gz 2.tomcat:apache-tomcat-7.0.59.tar.gz 3.zookeeper-3.4.6.tar ...

  8. php开发面试题---vue面试题(vue.js的好处及作用)

    php开发面试题---vue面试题(vue.js的好处及作用) 一.总结 一句话总结: 双向数据绑定:在做ajax的时候,更新实在是太方便了 用数据绑定的思想,vue可以简单写单个页面,也可以写一个大 ...

  9. 19、javascript基础知识

    1.几天接到了一个奇葩的需求,就是在鼠标滚轮滑动的时候,div要悬浮不动,因此这引起了我对于javascript知识的复习 首先从最基础的变量的类型开始 <!DOCTYPE html> & ...

  10. Bochs调试加载符号文件的问题

    1. Bochs中的调试命令ldsym没有触发的情况. 参考:http://www.ibm.com/developerworks/cn/linux/sdk/lex/ Lex 代表 Lexical An ...