uva 12470 Tribonacci

简介: 点击打开uva12470  思路: 矩阵快速幂 分析: 1 裸题 代码: /************************************************ * By: chenguolin ...

点击打开uva12470 

思路: 矩阵快速幂

分析:

1 裸题


代码:

/************************************************
 * By: chenguolin                               * 
 * Date: 2013-08-30                             *
 * Address: http://blog.csdn.net/chenguolinblog *
 ************************************************/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

typedef long long int64;
const int MOD = 1e9+9;
const int N = 3;

int64 n;
struct Matrix{
    int64 mat[N][N];
    Matrix operator*(const Matrix& m)const{
        Matrix tmp;
        for(int i = 0 ; i < N ; i++){
            for(int j = 0 ; j < N ; j++){
                tmp.mat[i][j] = 0;
                for(int k = 0 ; k < N ; k++)
                    tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;
                tmp.mat[i][j] %= MOD;
            }
        }
        return tmp;
    }
};

int Pow(Matrix m){
    if(n <= 3) return n-1;
    Matrix ans;
    memset(ans.mat , 0 , sizeof(ans.mat));
    for(int i = 0 ; i < N ; i++)
        ans.mat[i][i] = 1;
    n -= 3;
    while(n){
        if(n%2)
            ans = ans*m;
        n /= 2;
        m = m*m;
    }
    int64 sum = 0;
    sum += ans.mat[0][0]*2%MOD;
    sum += ans.mat[0][1]*1%MOD;
    return sum%MOD;
}

int main(){
    Matrix m;
    memset(m.mat , 0 , sizeof(m.mat));
    for(int i = 0 ; i < N ; i++)
        m.mat[0][i] = 1;
    m.mat[1][0] = 1 ; m.mat[2][1] = 1;
    while(scanf("%lld" , &n) && n)
        printf("%d\n" , Pow(m));
    return 0;
}


目录
相关文章
|
Java
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
82 1
|
设计模式 Java 应用服务中间件
【Nginx】冰河又一本超硬核Nginx PDF教程免费开源!!
在 【冰河技术】 微信公众号中的【Nginx】专题,更新了不少文章,有些读者反馈说,在公众号中刷 历史文章不太方便,有时会忘记自己看到哪一篇了,当打开一篇文章时,似乎之前已经看过了, 但就是不知道具体该看哪一篇了。相信很多小伙伴都会有这样的问题。那怎么办呢?最好的解决 方案就是我把这些文章整理成PDF电子书,免费分享给大家,这样,小伙伴们看起来就方便多 了。希望这本电子书能够给大家带来实质性的帮助。
806 0
【Nginx】冰河又一本超硬核Nginx PDF教程免费开源!!
|
安全 Java API
『并发包入坑指北』之向大佬汇报任务
在面试过程中聊到并发相关的内容时,不少面试官都喜欢问这类问题: 当 N 个线程同时完成某项任务时,如何知道他们都已经执行完毕了。
|
存储 算法 C++
数据结构与算法 第二次实验报告堆栈队列
    数据结构与算法 第二次实验报告             姓名:许恺 学号:2014011329 班级:计算机14-1                           中国石油大学(北京)计算机科学与技术系     前     言     《数据结构》是计算机及相关专业的一门核心基础课程,也是很多高校考研专业课之一。
1666 0
|
C# 索引
Datatable删除行的Delete和Remove方法
在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行 2,datatable.Rows[i].Delete()。
1314 0
|
21小时前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。