问题描述
斐波那契数列大家都非常熟悉。它的定义是:

f(x) = 1 …. (x=1,2)
f(x) = f(x-1) + f(x-2) …. (x>2)

对于给定的整数 n 和 m,我们希望求出:
f(1) + f(2) + … + f(n) 的值。但这个值可能非常大,所以我们把它对 f(m) 取模。
公式如下

但这个数字依然很大,所以需要再对 p 求模。
输入格式
  输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18)
输出格式
  输出为1个整数,表示答案
样例输入
2 3 5
样例输出
0
样例输入
15 11 29
样例输出
25
解析:数据量超大,需要用到大数处理,在求解斐波那契数列的时候要用矩阵快速幂的方法,下面的代码只能的40分,具体原因是在求f(1) + f(2) + … + f(n)的时候没有处理好,做循环的时候不能用long n做上界,的确可以改成大数进行循环,但是这又牵扯到大数进行位运算,这里不是很明白,所以也无法给出满分的代码。

import java.math.BigInteger;
import java.util.Scanner;public class Main {public static BigInteger[][] ZERO = {{BigInteger.ZERO,BigInteger.ZERO}, {BigInteger.ZERO,BigInteger.ZERO}};public static BigInteger[][] KEY = {{BigInteger.ONE,BigInteger.ONE}, {BigInteger.ONE,BigInteger.ZERO}};public static BigInteger MOD;public static BigInteger[][] mergeMulti(long n) {if(n == 0) {return ZERO;}if(n == 1) {return KEY;}if((n&1) == 0) {  // n为偶数BigInteger[][] temp = mergeMulti(n>>1);return matrixMulti(temp, temp);} else {  // n为奇数BigInteger[][] temp = mergeMulti(n>>1);return matrixMulti(matrixMulti(temp, temp), KEY);}}public static BigInteger[][] matrixMulti(BigInteger[][] A, BigInteger[][] B) {BigInteger[][] result = new BigInteger[A.length][B[0].length];for(int i = 0;i < A.length;i++) {for(int j = 0;j < B[0].length;j++) {result[i][j] = BigInteger.ZERO;for(int k = 0;k < A[0].length;k++) {result[i][j] = result[i][j].add(A[i][k].multiply(B[k][j]));}}}       return result;}public static BigInteger sum(long n) {BigInteger cnt = BigInteger.ZERO;for (int i = 1; i <= n; i++) {cnt = cnt.add(mergeMulti(i)[0][1]);}return cnt;}public static void main(String[] args) {Scanner in = new Scanner(System.in);long n = in.nextLong();long m = in.nextLong();MOD = in.nextBigInteger();BigInteger result = sum(n);result = result.mod(mergeMulti(m)[0][1]).mod(MOD);System.out.println(result);}
}

蓝桥杯历届试题----斐波那契(矩阵快速幂)相关推荐

  1. 又见斐波那契~矩阵快速幂入门题

    链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...

  2. 「GXOI / GZOI2019」逼死强迫症——斐波那契+矩阵快速幂

    题目 [题目描述] ITX351 要铺一条 $2 \times N$ 的路,为此他购买了 $N$ 块 $2 \times 1$ 的方砖.可是其中一块砖在运送的过程中从中间裂开了,变成了两块 $1 \t ...

  3. 蓝桥杯入门练习题斐波那契数列

    蓝桥杯入门练习题 斐波那契数列 #include <stdio.h> #include <stdlib.h>int main() {long long i, j, f1 = 1 ...

  4. 2013蓝桥杯 黄金分割数 斐波那契数列与黄金分割比例的结合应用+模拟手算

    黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...

  5. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)

    问题 1435: [蓝桥杯][历届试题]国王的烦恼 时间限制: 1Sec 内存限制: 128MB 提交: 802 解决: 213 题目描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了 ...

  6. 蓝桥杯 - 历届试题 - 日期问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_33531813/article/details/79516258 </div>&l ...

  7. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  8. 二分搜索,POJ2456,NYOJ 914, 区间移位-蓝桥杯-历届试题

    二分搜索是不断缩减可能解的范围来得到最优解, 因为每次是折半, 所以指数爆炸有多快,这个效率就有多高 POJ2456为例, 传送门 简而言之, 就是将牛之间的距离的最小值最大化. #include&l ...

  9. 蓝桥杯历届试题代码参考

    蓝桥杯历届试题代码参考 历届试题 核桃的数量 打印十字图 带分数 剪格子 错误票据 翻硬币 连号区间数 买不到的数目 大臣的旅费 幸运数 横向打印二叉树 危险系数 网络寻路 高僧斗法 格子刷油漆 农场 ...

最新文章

  1. excel vlookup多个条件匹配多列_Excel中的Vlookup函数,轻松实现多条件查询!
  2. 用它调试线上 bug,真得劲 | webconsole
  3. 新手入门 keil MDK5 建立STM32工程
  4. 自定义 View 功能上线,你的小程序可以更多变
  5. 安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样
  6. centos8.2安装mysql_centos8安装mysql
  7. Redis学习总结(6)——Redis 高级特性与案例学习
  8. ES10新特性_字符串扩展方法_trimStart--trimEnd---JavaScript_ECMAScript_ES6-ES11新特性工作笔记058
  9. centos 阿帕奇无法解析php_PHP之校园连接企业之路-2
  10. Digilent提供的PmodOLEDrgb驱动程序
  11. centos7+mysql5.7二进制安装
  12. 西瓜笔记(五上)--线性模型
  13. 中rsa非对称加密_HTTP的数据传输中,对称加密和非对称加密的区别是什么?
  14. 中国海洋大学c语言程序设计,中国海洋大学C语言级期末卷.pptx
  15. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 4 周:选择期刊
  16. 教你如何用两个队列实现一个栈
  17. HTML,CSS,JavaScript知识树思维导图
  18. 内存带宽测试与AVX指令集读写内存
  19. 修改文件错误:E45: 'readonly' option is set (add ! to override)
  20. 安装TDM-GCC时一直报错,大佬求解

热门文章

  1. 拉普拉斯变换_拉普拉斯变换——奇妙的数学
  2. hive 和mysql配置_Hive学习和配置Mysql
  3. win执行mysql建库脚本_linux执行mysql脚本文件连接本地windows数据库
  4. selenium java po模式_selenium + java po模式
  5. java定义一个方法,返回一个浮点数保留两位小数,考虑四舍五入的结果
  6. MySQL字符串类型
  7. C语言数据类型转换详解
  8. pcl通过积分图来进行法线预测
  9. js文件中怎么使用thymeleaf标签_007、Spring Boot集成Thymeleaf模板引擎
  10. forager有多少个机器人_诠视科技:VSLAM技术进展让移动机器人自主行驶有了更广阔的空间...