★题目描述

fibonacci 数列的递推公式是F(n) = F(n-1) + F(n-2)(n >= 2 且 n 为整数)。

将这个递推式改为F(n) = aF(n-1) + bF(n-2)(n >= 2 且 n 为整数)时得到的是怎样的数列。

注意,这里我们依然令 F(0)=F(1)=1。

★输入格式

输入第一行三个正整数 q, a, b。

接下来有 q 行,每行一个自然数 n。

对于50%的数据,1 <= q、n <= 1000。

对于80%的数据,1 <= q、n <= 100000。

对于100%的数据,1 <= q <= 100000,1 <= n <= 1000000000,1 <= a、b <= 1000。

★输出格式

对于操作2,输出一个整数,表示对应的元素。

★样例输入

5 4 5
2
4
8
16
32

★样例输出

9
209
1377
182
9

★参考代码

思路参考自共享文件

/*
可以使用递归或用数组+循环的方法
但是这种方法必定超时 所以必须优化,使用矩阵求法
进行公式推导:
f[n] [a b] f[n-1] [a b]^n-1 f[1]
= * = *
f[n-1] [1 0] f[n-2] [1 0] f[0] 所以核心是
[a b]^n-1
[1 0] 现在问题转化为快速求矩阵的幂,原理如下,例如
A8 = A4*A4 = A2*A2*A4 时间降为log(n)
*/
#include<bits/stdc++.h>
using namespace std; int q,a,b;
const int mod=2013; class Matrix{
private:
int a11,a12,a21,a22; public:
Matrix(){}
Matrix(int a,int b,int c,int d){
a11=a%mod;
a12=b%mod;
a21=c%mod;
a22=d%mod;
}
Matrix operator *(const Matrix &m){
return Matrix(a11*m.a11+a12*m.a21, a11*m.a12+a12*m.a22,
a21*m.a11+a22*m.a21, a21*m.a12+a22*m.a22);
}
int getRes(){
return (a11*1+a12*1)%mod;
}
}; int fib(int n){
Matrix resM(1,0,0,1); //单元矩阵
Matrix M(a,b,1,0);
while(n>0){
if(n&1) resM = resM*M;//如果n不是偶数
M=M*M;
n>>=1; //n缩小2倍
}
return resM.getRes();
} int main(){
cin>>q>>a>>b; int n;
while(q--){
scanf("%d",&n);
printf("%d\n",fib(n-1));
}
return 0;
}

算法设计与分析 1.2 不一样的fibonacci数列的更多相关文章

  1. 算法设计与分析 1.2 不一样的fibonacci数列 (矩阵快速幂思想)

    题目描述 Winder 最近在学习 fibonacci 数列的相关知识.我们都知道 fibonacci 数列的递推公式是F(n) = F(n - 1) + F(n - 2)(n >= 2 且 n ...

  2. 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划

    由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...

  3. 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)

    PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...

  4. 算法设计与分析 - AC 题目 - 第 2 弹

    PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...

  5. 算法设计与分析-Week12

    题目描述 You are given coins of different denominations and a total amount of money amount. Write a func ...

  6. 南大算法设计与分析课程复习笔记(1) L1 - Model of computation

    一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...

  7. 算法设计与分析基础 (Anany Levitin 著)

    第1章 绪论 1.1 什么是算法 1.2 算法问题求解基础 1.2.1 理解问题 1.2.2 了解计算设备的性能 1.2.3 在精确解法和近似解法之间做出选择 1.2.4 算法的设计技术 1.2.5 ...

  8. 算法设计与分析(李春保)练习题答案v1

    1.1第1 章─概论 1.1.1练习题 1.下列关于算法的说法中正确的有(). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模 ...

  9. 算法设计与分析 - 李春葆 - 第二版 - pdf->word v3

    1.1 第1章─概论 练习题 . 下列关于算法的说法中正确的有( ). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ. ...

随机推荐

  1. python3 TensorFlow训练数据集准备 下载一些百度图片 入门级爬虫示例

    从百度图片下载一些图片当做训练集,好久没写爬虫,生疏了.没有任何反爬,随便抓. 网页: 动态加载,往下划会出现更多的图片,一次大概30个.先找到保存每一张图片的json,其对应的url: 打开调试,清 ...

  2. vue render函数解析

    一.render 函数的作用: 写一些vue.js的template太繁琐,利用render,可以使用js来生成模板,更加灵活和简便. 二.使用render前提: 官网也说了.在深入渲染函数之前推荐阅 ...

  3. Android8.1 源码修改之插入SIM卡默认启用Volte功能

    前言 公用电话产品,插入SIM卡后要求自动打开Volte功能,即插即用,用完拔卡就走 实现 第一步 开关对应的代码 通过打印日志和全局查找,源码位置 vendor/mediatek/proprieta ...

  4. CocoaPods安装和使用201712

    CocoaPods安装使用详解 2017.12 首先,很有必要了解一下CocoaPods.Ruby和RubyGems,以及它们之间的关系. CocoaPods是第三方库的辅助管理工具,依赖于Ruby. ...

  5. 基于Python的SQL Server数据库对象同步轻量级实现

    缘由 日常工作中经常遇到类似的问题:把某个服务器上的某些指定的表同步到另外一台服务器.类似需求用SSIS或者其他ETL工作很容易实现,比如用SSIS的话就可以,但会存在相当一部分反复的手工操作.建源的 ...

  6. packstack-ironic

    安装openstack Pike版本, 其它版本安装方法类似. centos7.6 packstack目前对NetworkManager 还不支持,我们修改下配置: systemctl disable ...

  7. 2017 经典的CVPR 关于ImageCaptioning论文

    1.        SCA-CNN: Spatial and Channel-wise Attention in Convolutional Networks for Image Captioning ...

  8. tensorflow和pytorch教程

    https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book

  9. QT QSplitter设置初始比例setStretchFactor失效解决

    QSplitter如下为常用 设置显示比例 pRightSplitter=new QSplitter(Qt::Vertical); pRightSplitter->setMouseTrackin ...

  10. PHP—— 商品物流实时查询接口 (快递100API对接)

    PHP后台  与前端   对接商品物流信息的接口 运用的 快递100的API接口 public function getExpress() { $user_id = input('post.user_ ...