• luogu P1962 斐波那契数列 |矩阵乘法


    题目背景

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

    题目描述

    请你求出 (F_n mod 10^9 + 7) 的值。

    输入格式

    一行一个正整数 (n)

    输出格式

    输出一行一个整数表示答案。

    代码极其丑陋

    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define ll long long
    ll n,mod=1e9+7;
    struct E{
    	ll a[3][3];
    };
    inline E C(E t1,E t2){
    	E ans;
    	for(int i=1;i<=2;i++)
    	for(int j=1;j<=2;j++)
    	ans.a[i][j]=0;
        for(int k=1;k<=2;k++)
    	for(int j=1;j<=2;j++)
    	for(int i=1;i<=2;i++)
    	ans.a[i][j]=(ans.a[i][j]+t1.a[i][k]*t2.a[k][j])%mod;
    	return ans;
    }
    inline E ksm(E t,ll x){
    	E res;
        res.a[1][1]=1;
        res.a[1][2]=0;
        res.a[2][1]=0;
        res.a[2][2]=1;
        while(x){
            if(x&1)res=C(res,t);
            t=C(t,t); x>>=1;
        }
        return res;
    }
    int main(){
    	cin>>n;
    	if(n==1||n==2){
    		cout<<1<<endl;
    		return 0;
    	}
    	E t;
    	t.a[1][1]=1;
    	t.a[1][2]=1;
    	t.a[2][1]=1;
    	t.a[2][2]=0;
    	t=ksm(t,n-2);
    	cout<<(t.a[1][1]+t.a[1][2])%mod;
    }
    
  • 相关阅读:
    php基本语法
    php的环境搭建
    Java数组及其内存分配
    最快的maven镜像
    配置maven到运行
    配置maven
    maven的eclise配置
    mysql中bit_count和bit_or函数的含义
    怎样查看MySQL是否区分大小写
    linux忘记mysql密码找回方法
  • 原文地址:https://www.cnblogs.com/naruto-mzx/p/12981205.html
Copyright © 2020-2023  润新知