首页 > 其他分享 >51nod 1242 斐波那契数列的第N项(矩阵快速幂)

51nod 1242 斐波那契数列的第N项(矩阵快速幂)

时间:2023-05-04 14:31:57浏览次数:45  
标签:node 1000000009 51nod long 斐波 int 1242 include



1242 斐波那契数列的第N项



基准时间限制:1 秒 空间限制:131072 KB 分值: 0  难度:基础题



 收藏

 关注

斐波那契数列的定义如下:



F(0) = 0


F(1) = 1


F(n) = F(n - 1) + F(n - 2) (n >= 2)



(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...)


给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可。


Input


输入1个数n(1 <= n <= 10^18)。


Output


输出F(n) % 1000000009的结果。


Input示例


11


Output示例


89




李陶冶  (题目提供者)






中文题目,不用多说......



点击打开链接




#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define mod 1000000009

using namespace std;

long long int n;

struct node {
    long long int c[2][2];
} t;

node mult(node a,node b) {   ///矩阵相乘
    node cc;
    for(int i=0; i<2; i++) {
        for(int j=0; j<2; j++) {
            cc.c[i][j] = 0;
            for(int k=0; k<2; k++) {
                cc.c[i][j] += (a.c[i][k]*b.c[k][j])%mod;
            }
            cc.c[i][j] = cc.c[i][j]%mod;
        }
    }
    return cc;
}

node expo(long long int nn) {
    node pt = t;
    if(nn<0){
        return pt;
    }
    while(nn) {
        if(nn&1) {
            pt = mult(pt,t);
            nn--;
        }
        t = mult(t,t);
        nn = nn>>1;
    }
    return pt;
}

int main() {
    while(scanf("%lld",&n)!=EOF) {
        t.c[0][0] = 1;
        t.c[0][1] = 1;
        t.c[1][0] = 1;
        t.c[1][1] = 0;
        node tt = expo(n-2);
        printf("%lld\n",tt.c[0][0]);
    }
    return 0;
}



标签:node,1000000009,51nod,long,斐波,int,1242,include
From: https://blog.51cto.com/u_14834528/6242764

相关文章

  • 51nod_1355
    题目链接题意给出\(n\)个正整数\(a_1,a_2\cdots,a_n\),求\(\operatorname{lcm}(F_{a_1},F_{a_2},\cdots,F_{a_n})\)。其中\(\{F_i\}\)为斐波那契数列。\(2\len\le50000,1\lea_i\le1000000\)3s解答斐波那契数列的最小公倍数很难直接求,但是其最大公约数却有优美......
  • 使用数学归纳法证明斐波那契数列通项公式
    使用数学归纳法证明斐波那契数列通项公式:\(F_{n}=\dfrac{\phi^{n}-\hat{\phi}^{n}}{\sqrt{5}}\)定义已知斐波那契数列\(F\)定义为:\[F_{n}=\begin{cases}0,n=0\\n,n=1\\F_{n-1}+F_{n-2},i\ge2\end{cases}\]\(\phi\)和......
  • 斐波那契数列第n项
    importjava.util.Scanner;publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); intn=sc.nextInt(); inta=1,b=1,i=1; while(i<n){ intc=a+b; a=b; ......
  • Python 斐波那契数列
    概念:斐波那契数列又称黄金分割数列,即:1,1,2,3,5,8,13,21,…,这个数列前两项都是1,从第3项开始,每一项都等于前两项之和。随着数列的增加,前一项与后一项的比值逼近0.6180339887这个黄金分割系数 code:deffiblist(input):fib=[1,1]#第一和第二项固定为值为1......
  • 代码随想录Day38-Leetcode509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
    咳咳,因为找实习+摆导致时间被浪费大半;先从动态规划学起吧,之前的慢慢补。理论基础动态规划的解题步骤1.确定dp数组及对应下标的含义2.确定dp的状态转移方程(递推公式)3.确定dp数组如何初始化4.确定dp遍历顺序5.距离推导dp数组验证509.斐波那契数题目链接:https://le......
  • 剑指 Offer 10- I. 斐波那契数列
     分析:偷个懒,上次做的一样的题代码:1classSolution(object):2deffib(self,n):3"""4:typen:int5:rtype:int6"""7ifn<2:8returnn9f=[0foriinra......
  • 509. 斐波那契数
     分析:简单动态规划,状态转移已经给出直接写代码但是出了一个小问题,由于粗心,这题是从0算起,到n我给的范围没有到n修改提交通过代码:1classSolution(object):2deffib(self,n):3"""4:typen:int5:rtype:int6"""......
  • 虚拟机热迁移一直处于迁移中的状态-v4-20210308_124243
    虚拟机热迁移一直处于迁移中的状态企业云平台产品中心共享知识库Exportedon03/08/2021TableofContents问题现象:对虚拟机进行热迁移操作,Dashboard和云服务自助平台上一直处于迁移中的状态问题原因:虚拟机存在频繁的数据读写操作,导致虚拟机迁移的速度追不上数据读写的速度,每次迁......
  • 斐波那契数列
    斐波那契数列 公式:F(n)=F(n-1)+F(n-2)  步骤: 1、初始化:第0项为0,第1项为1if(n<=1){  returnn;} 2、设置参数,确保第二项也为1intres=0;inta=0;intb=1; 3、从2开始循环到n,把自己的值赋给下一项for(inti=2;i<=n;i++){  res=a+......
  • 03 | 写一个能产生斐波那契数列的range——惰性求值
    1.首先为了满足range概念的要求我们需要提供begin()和end()2.begin()和end()返回的应该是迭代器,注意这个地方两种可以返回两种不同类型(c++17后即可)3.为了满足迭代器概念的要求我们提供5个typedef,并根据std::input_iterator_tag类型决定我们要实现的“解引用函数”,......