Pro

设f(x)f(x)f(x)表示斐波那契数列的第x项。求f(f(x))f(f(x))f(f(x))对1e9+71e9+71e9+7取模的答案。其中x≤10100x≤10100x≤10^{100}。

Sol

本题的代码实现真的不难,难就难在了思路和预处理。

分析:我们令t=f(x)t=f(x)t=f(x),那么题目转化为求f(t)f(t)f(t)对1e9+71e9+71e9+7取模的值。考虑取模,取模后肯定会产生一个类似循环节的东西,所以求f(t)f(t)f(t)对1e9+71e9+71e9+7取模的值的循环节,记为T1T1T1。求出来之后再返回去,求f(x)f(x)f(x)的循环节,记为T2T2T2,f(x)≤T1f(x)≤T1f(x)≤T1,此时应取模T1T1T1求得T2T2T2。最后问题转化为:求f(f(xf(f(xf(f(x%T2)%T1)%(1e9+7)的值。因为xxx的范围很大,所以考虑高精度取模。

预处理:其实需要预处理的只是T1" role="presentation" style="position: relative;">T1T1T1和T2T2T2,因为由题目可知,T1T1T1和T2T2T2为常数(不随xxx变化而变化)。

下面代码是矩阵快速幂的斐波那契数列(一次操作O(logn)" role="presentation" style="position: relative;">O(logn)O(logn)O(logn))。

Code

#include<iostream>
#include<cstdio>
#include<set>
#include<string>
#define LL long long
using namespace std;struct Ju1 {LL x , y;
};
struct Ju2 {LL x1 , x2 , x3 , x4;
};
const LL mod = 1e9+7;
LL T1 = 2000000016 , T2 = 32916;
string n;
Ju1 dw1;
Ju2 dw2 , dw3;Ju2 mul(Ju2 x , Ju2 y) {Ju2 t;t.x1 = (x.x1 * y.x1 % mod + x.x2 * y.x3 % mod) % mod;t.x2 = (x.x1 * y.x2 % mod + x.x2 * y.x4 % mod) % mod;t.x3 = (x.x3 * y.x1 % mod + x.x4 * y.x3 % mod) % mod;t.x4 = (x.x3 * y.x2 % mod + x.x4 * y.x4 % mod) % mod;return t;
}Ju1 qmul(Ju2 x , Ju1 y) {Ju1 t;t.x = (x.x1 * y.x % mod + x.x2 * y.y % mod) % mod;t.y = (x.x3 * y.x % mod + x.x4 * y.y % mod) % mod;return t;
}Ju2 qpow(Ju2 x , int y) {if(y == 0)return dw3;Ju2 t = qpow(x , y/2);if(y%2 == 0)return mul(t , t);return mul(mul(t , t) , dw2);
}LL fib(LL x) {if(x == 1)return 1;Ju1 t = qmul(qpow(dw2,x-2) , dw1);return t.x % mod;
}void init() {dw1.x = 1 , dw1.y = 1;dw2.x1 = dw2.x2 = dw2.x3 = 1 , dw2.x4 = 0;dw3.x1 = dw3.x4 = 1 , dw3.x2 = dw3.x3 = 0;
}LL qmod(string s , LL x) {LL d = 0;for(int i=0; i<s.size(); i++)d = (d*10 + (s[i]-'0'))%x;return d;
}int main() {cin>>n;init();printf("%lld",fib(fib(qmod(n,T2))%T1)%mod);return 0;
}

[Pro]斐波那契数列阿【斐波那契数列】相关推荐

  1. c语言斐波那契数列_斐波那契数列之美

    美妙绝伦的基本算法 Image by Gerd Altmann on Pixabay 在研究和进行有关数据处理,计算相关计算机或数学运算的研究时,我们遇到了很多算法. 即使有时候我们不太喜欢数学,但我 ...

  2. python兔子繁殖问题中如何输出相应月份的数列_斐波那契数列介绍及Python中五种方法斐波那契数列...

    Q:斐波那契数列为何那么重要,全部关于数学的书几乎都会提到? A:由于斐波那契数列在数学和生活以及天然界中都很是有用.html 1. 斐波那契数列 概念引入 斐波那契数列(Fibonacci sequ ...

  3. 一维搜索斐波那契C语言,斐波那契数列在一维搜索中的应用

    斐波那契数列在一维搜索中的应用 Fibonacci数列在一维搜索中的应用 斐波那契数列: 斐波那契数列又称"斐波那契神奇数列",是由13世纪的意大利数学家斐波那契提出的,当时是和兔 ...

  4. 优美的数列(斐波那契数列)

    斐波那契数列是一个十分玄妙的数列,为什么说它是优美的呢?原因在于我们可以利用斐波那契数列画出拥有最美比例的黄金比例长方形,对于该数列的本质是利用动态规划的思想来得到的. 数列大致为1,1,2,3,5, ...

  5. matlab斐波那契数列画图,斐波拉契数列 斐波那契数列 matlab程序

    斐波那契数列数列从第3项开始,每一项都等于前两项之和. 例子:数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,25 ...

  6. 一文解决斐波那契数列求前n项和;和求第n个数是多少的问题;斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

    题目:斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)= 0,F(1) ...

  7. 【递归 动态规划 备忘录法】Fibonacci数列(斐波那契数列)(C++)

    一.什么是Fibonacci数列 斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144- 用文字来说,就是从第3项开始,每一项都等于前两项 ...

  8. 斐波那契数列是个啥(兔子数列)]

    [斐波那契数列是个啥(兔子数列)] 背景 这是我在公交车上突然就想起了这个话题,之后总结了一下,很简单: 斐波那契在<计算之术>这本书中,提出了一个问题:在第一个月有一对刚出生的小兔子,在 ...

  9. C语言案例-输出 Fibonacci 数列(斐波那契数列)的前 40 项

    输出 Fibonacci 数列(斐波那契数列)的前 40 项 代码如下所示: 方法一: #include "stdio.h" void main() {int i,f1,f2,f3 ...

  10. python实现斐波那契数列_斐波那契数列:python实现和可视化

    1 说明 ==== 1.1 斐波那契数列的介绍. 1.2 斐波那契数列是上帝的指纹,大自然中随处可见,目前广泛应用到黄金分割线的布局美和股市等预测等等. 1.3 斐波那契数列的Python的matpl ...

最新文章

  1. 不写一行代码,也能玩转Kaggle竞赛?
  2. 《Ember.js实战》——2.3 计算属性
  3. 深度学习不得不会的迁移学习Transfer Learning
  4. Word中样式更新的两种方法!
  5. 邵阳学院计算机科学与技术专业分最低,邵阳学院在湖南各专业录取最低分/最低位次...
  6. java解析xml的几种方式
  7. post提交参数过多时,取消Tomcat对 post长度限制
  8. 为什么不能睁一只眼闭一只眼_自媒体人上哪里找非常多的原创短视频素材?我为什么一定要你做原创?...
  9. C#中的三层前馈神经网络,带有图形显示
  10. 曼大和华威计算机科学预科哪个好,华威预科申请曼彻斯特本科
  11. VC里的project panel窗口如何实现(转载)
  12. 测试开发之测试方法第二篇
  13. Seata详解(二)
  14. 小米上市 365 天:雷军的坚守与败退
  15. Linux基本命令 帮助命令
  16. 前端开发必备,【项目实战】
  17. 【修真院web小课堂】如何理解html结构的语义化
  18. Zemax学习笔记(11) - 变焦镜头设计实例
  19. SIMCom芯片关于GPS定位信息的的解析(AT+CGNSINF)
  20. 《第四期(2021-2022)传统行业云原生技术落地调研报告——金融篇》正式发布

热门文章

  1. IOC容器和Bean的配置
  2. A*B Problem II
  3. 明明有印象却找不到,APP内搜索为什么这么难用?
  4. CentOS 7 安装OpenOffice并实现WordToPDF(Java调用)
  5. 几款Linux系统漏洞扫描、评估工具简介
  6. zabbix3.2学习笔记(四):设置sendEmail告警动作
  7. 《SEM长尾搜索营销策略解密》一一2.9 长尾,寻找蓝海的最好方式
  8. WPF TreeView的使用
  9. 续《用最简单的例子实现jQuery图片即时上传》之多图上传实现
  10. 工资计算问题,类似计算某天是一年中的第几天的问题