zoukankan      html  css  js  c++  java
  • 【luogu 1962】斐波那契数列

    题目背景

    大家都知道,斐波那契数列是满足如下性质的一个数列:

    • f(1) = 1

    • f(2) = 1

    • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数)

    题目描述

    请你求出 f(n) mod 1000000007 的值。

    输入输出格式

    输入格式:

    ·第 1 行:一个整数 n

    输出格式:

    第 1 行: f(n) mod 1000000007 的值

    输入输出样例

    输入样例#1:
    5
    输出样例#1:
    5
    输入样例#2:
    10
    输出样例#2:
    55

    说明

    对于 60% 的数据: n ≤ 92

    对于 100% 的数据: n在long long(INT64)范围内。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define ll long long
     6 using namespace std;
     7 const ll Mod=1000000007;
     8 ll n;
     9 struct matrix{ll m[5][5];}a;
    10 matrix multiply(matrix a,matrix b){
    11     matrix t;
    12     for(int i=1;i<=2;i++)
    13         for(int j=1;j<=2;j++){
    14             t.m[i][j]=0;
    15             for(int k=1;k<=2;k++)
    16                 t.m[i][j]=(t.m[i][j]+a.m[i][k]*b.m[k][j])%Mod;
    17         }
    18     return t;
    19 }
    20 matrix fast(matrix a,ll p){
    21     matrix ans=a;p--;
    22     while(p>0){
    23         if(p&1) ans=multiply(ans,a);
    24         a=multiply(a,a);
    25         p>>=1;
    26     }
    27     return ans;
    28 }
    29 int main(){
    30     a.m[1][2]=a.m[2][1]=a.m[2][2]=1;
    31     scanf("%lld",&n);
    32     matrix tmp=fast(a,n);
    33     printf("%lld",tmp.m[1][2]);
    34     return 0;
    35 }
  • 相关阅读:
    JAVA面试题
    Io流
    初识线程池
    理解事务的4种隔离级别
    简单认识Git与GitHub
    JAVA自动装箱和拆箱
    代码块以及他们的执行顺序
    反射机制
    java Excel表格
    访问修饰符的含义分析
  • 原文地址:https://www.cnblogs.com/Emine/p/7644581.html
Copyright © 2011-2022 走看看