题目1444:蓝桥杯201 4年第五届真题斐波那契

news/2024/5/18 22:06:30/文章来源:https://blog.csdn.net/feng8403000/article/details/128127794

这篇文章是帮一个叫做【废柴成长中】的孩子写的。

题目:

这里难点应该就是在【输入为一行用空格分开的整数n m p(0<n,m,p<10^18)】 ,这里一下子就把最大值干成long的最大范围了,很明显,long肯定也不行。

解析其实不是太麻烦,先分析,然后咱们在一点点的编写出来。

题目中给的【fib(n) = fib(n+2)-fib(n+1)】这个方法应该分数不高,不然就直接能做出来了。

我们还得对超大数据进行操作,我这里选用的是【BigInteger】,毕竟这是纯整数,求余计算结果也是纯整数或0,就是计算起来没有直接写符号计算的方便而已。

看人家给的公式:

大致先写成这样,反正看的明白就行(Σ(n)f(i))modf(m)

已知:fib(n) = fib(n+2)-fib(n+1)

推导:Σf(n) = f(n+2)-1

推算一下变量m:

如果 m>=n+2那么f(m)>Σf(n),结果是(f(n+2)-1)%p,

反之结果为(f(n+2)-1)%f(m)%p==f(n+2)%f(m)%p-1。

直接上代码,其实很多时候看debug是最快的调试方案:

package com.example.demo2022110201;
/*** @author*/import java.math.BigInteger;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 三变量long n, m, p;n = sc.nextLong();m = sc.nextLong();p = sc.nextLong();BigInteger bigP = BigInteger.valueOf(p);if (m >= n + 2) {BigInteger ans = fib(n + 2, bigP);System.out.println(ans.mod(bigP).longValue() - 1);} else {BigInteger fib_m = fib(m);BigInteger ans = fib(n + 2, fib_m);System.out.println(ans.mod(fib_m).mod(bigP).longValue() - 1);}sc.close();}/*** 快速矩阵求fib** @param m* @return*/private static BigInteger fib(long m) {BigInteger[][] ans = mPow(m - 2);return ans[0][0].add(ans[1][0]);}private static BigInteger fib(long m, BigInteger mod) {BigInteger[][] ans = mPow(m - 2, mod);return ans[0][0].add(ans[1][0]);}/*** 矩阵快速幂** @param n* @return*/private static BigInteger[][] mPow(long n) {BigInteger[][] a ={{BigInteger.ONE, BigInteger.ONE}, {BigInteger.ONE, BigInteger.ZERO}};//基础矩阵BigInteger[][] ans ={{BigInteger.ONE, BigInteger.ZERO}, {BigInteger.ZERO, BigInteger.ONE}};while (n != 0) {if ((n & 1) == 1) {BigInteger t1 = ans[0][0];BigInteger t2 = ans[1][0];ans[0][0] = ans[0][0].multiply(a[0][0]).add(ans[0][1].multiply(a[1][0]));ans[0][1] = t1.multiply(a[0][1]).add(ans[0][1].multiply(a[1][1]));ans[1][0] = ans[1][0].multiply(a[0][0]).add(ans[1][1].multiply(a[1][0]));ans[1][1] = t2.multiply(a[0][1]).add(ans[1][1].multiply(a[1][1]));}BigInteger t1 = a[0][0];BigInteger t2 = a[1][0];BigInteger t3 = a[0][1];a[0][0] = a[0][0].multiply(a[0][0]).add(a[0][1].multiply(a[1][0]));a[0][1] = t1.multiply(a[0][1]).add(a[0][1].multiply(a[1][1]));a[1][0] = a[1][0].multiply(t1).add(a[1][1].multiply(a[1][0]));a[1][1] = t2.multiply(t3).add(a[1][1].multiply(a[1][1]));n >>= 1;}return ans;}private static BigInteger[][] mPow(long n, BigInteger mod) {BigInteger[][] a ={{BigInteger.ONE, BigInteger.ONE}, {BigInteger.ONE, BigInteger.ZERO}};//基础矩阵BigInteger[][] ans ={{BigInteger.ONE, BigInteger.ZERO}, {BigInteger.ZERO, BigInteger.ONE}};while (n != 0) {if ((n & 1) == 1) {//结果乘当前平方BigInteger t1 = ans[0][0];BigInteger t2 = ans[1][0];ans[0][0] = ans[0][0].multiply(a[0][0]).add(ans[0][1].multiply(a[1][0])).mod(mod);ans[0][1] = t1.multiply(a[0][1]).add(ans[0][1].multiply(a[1][1])).mod(mod);ans[1][0] = ans[1][0].multiply(a[0][0]).add(ans[1][1].multiply(a[1][0])).mod(mod);ans[1][1] = t2.multiply(a[0][1]).add(ans[1][1].multiply(a[1][1])).mod(mod);}//算平方BigInteger t1 = a[0][0];BigInteger t2 = a[1][0];BigInteger t3 = a[0][1];//如果是其它语言就换成自己语言的大数处理即可。a[0][0] = a[0][0].multiply(a[0][0]).add(a[0][1].multiply(a[1][0])).mod(mod);a[0][1] = t1.multiply(a[0][1]).add(a[0][1].multiply(a[1][1])).mod(mod);a[1][0] = a[1][0].multiply(t1).add(a[1][1].multiply(a[1][0])).mod(mod);a[1][1] = t2.multiply(t3).add(a[1][1].multiply(a[1][1])).mod(mod);n >>= 1;}return ans;}
}

测试数据,我这没有平台,故而直接用测试用例的【15 11 29】,结果【25】正确

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_228445.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单封装一个易拓展的Dialog

Dialog&#xff0c;每个项目中多多少少都会用到&#xff0c;肯定也会有自己的一套封装逻辑&#xff0c;无论如何封装&#xff0c;都是奔着简单复用的思想&#xff0c;有的是深层次的封装&#xff0c;也就是把相关的UI效果直接封装好&#xff0c;暴露可以修改的属性和方法&#…

带你学习不一样的数据仓库系列-框架概念

编者按&#xff1a;本系列文章参考总结自IBM,FaceBook&#xff0c;Google等数据仓库构建英文文章&#xff0c;部分章节为直译过来&#xff0c;部分内容加上乐哥6年陌陌&#xff0c;快手等工作经验总结而来&#xff0c;让大家了解真实国外大厂数仓构建之路&#xff0c;国外同行对…

RabbitMQ初步到精通-第十一章-RabbitMQ之常见问题汇总

目录 RabbitMQ之常见问题汇总 1.rabbitmq丢消息场景 1.1 消息未持久化丢失 1.2 消费时消息丢失 1.3 如何阻止消息丢失 2. mq消费消息是pull 还是 push 2.1 pull形式消费 2.2 push形式消费 3. mq重复消费场景 3.1 生产端重复情况 3.2 消费端重复 3.3 如何防止 4.pre…

今年十八,喜欢ctf-web

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;红中 &#x1fad2;每日emo&#xff1a;等我把脸皮磨厚 &#x1f342;专栏地址&#xff1a;网安专栏 本来想早点睡&…

抓包工具简单介绍和 fiddler 安装

目录 1、 抓包工具介绍 2、原理 3、fiddler 安装 1、 抓包工具介绍 抓包工具&#xff0c;是个特殊的软件&#xff0c;相当于一个 “代理程序”&#xff0c;浏览器给服务器发的请求就会经过这个代理程序&#xff0c;进一步的就能分析出请求和响应的结果如何。 通俗的讲&…

【附源码】计算机毕业设计JAVA重工教师职称管理系统

【附源码】计算机毕业设计JAVA重工教师职称管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA…

【Pandas数据处理100例】(九十四):Pandas使用any()判断DataFrame中是否有True

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

Kotlin高仿微信-第26篇-朋友圈-选择图片、小视频对话框

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

基于ARM的环境参数检测系统设计(Labview+STM32+ZigBee)

目 录 1 绪论 1 1.1 研究背景和意义 1 1.2 研究现状 2 1.3 研究内容 3 2 系统概述和相关原理 4 2.1 系统的功能分析与设计 4 2.2 LabVIEW介绍 5 2.3 ZigBee技术 5 2.3.1 ZigBee技术概述 5 2.3.2 ZigBee网络协议 6 2.3.3 ZigBee网络拓扑结构 7 2.4 GSM技术 8 2.5 本章小结 8 3 …

[附源码]计算机毕业设计springboot企业售后服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

聚焦出海 长城汽车50多国家和地区经销商集团齐聚泰国车博会

11月30日&#xff0c;长城汽车携新能源豪华阵容登陆第39届泰国国际汽车博览会&#xff08;简称“泰国车博会”&#xff09;。以“GWM Light the Future”&#xff08;长城汽车点亮未来&#xff09;为参展主题&#xff0c;长城汽车旗下中大型商务豪华SUV坦克500 HEV量产版、欧拉…

pytest + yaml 框架 - 3.全局仅登录一次,在用例中自动在请求头部添加Authentication token认证

前言 我们在使用自动化测试框架的时候&#xff0c;经常会遇到一个需求&#xff0c;希望在全局用例中&#xff0c;仅登录一次&#xff0c;后续所有的用例自动带上请求头部token 或者cookies。 环境准备 Python 3.8版本 Pytest 7.2.0 最新版 pip 安装插件 pip install pytes…

iOS开发之打包上传到App Store——(一)各种证书的理解

OK&#xff0c;有日子没写iOS开发的相关文章啦&#xff0c;主要是最近的精力都没在这上面&#xff0c;不过既然产品已经快要出来了&#xff0c;就有必要了解一下各种证书啥的&#xff08;众所周知iOS的一堆证书可是很让人头大呀&#xff09;&#xff0c;最近确实被这个搞得头大…

Microsoft SQL Server 图书管理数据库的建立

文章目录题目描述创建数据库使用数据库创建三个表外码的表示形式结果展示题目描述 – 新建 “图书管理数据库" – 其中包含三个关系 – 图书&#xff08;编号&#xff0c;图书名&#xff0c;作者&#xff0c;出版社&#xff0c;类型&#xff0c;单价&#xff09; – 借阅…

Golang学习——基于vscode安装go环境

环境介绍 Linux x86_64 vscode 1.63.2 部署流程 下载并部署go安装包 根据实际环境&#xff0c;直接在go官网下载相应的编译好的二进制安装包即可&#xff1a; wget https://golang.google.cn/dl/go1.19.3.linux-amd64.tar.gz下载完成后解压安装包&#xff0c;然后将压缩包…

空域图像增强-图像灰度变换

1.图像灰度变换。自选一张图片&#xff0c;完成以下图像处理&#xff1a;①显示图像的灰度直方图&#xff1b;②直方图均衡化&#xff0c;对比变化前后的图像和灰度直方图&#xff1b;③对图像进行线性灰度变换&#xff0c;对某部分灰度值进行扩展&#xff0c;压缩其它灰度值区…

【发表案例】智能物联网类SCIEI,仅25天录用,计算机领域必投SCI快刊,12月截稿

【期刊简介】3.5-4.0&#xff0c;JCR2区&#xff0c;中科院3区 【检索情况】SCI&EI双检&#xff0c;正刊 【征稿领域】基于人工智能的工业物联网智能传感器 【参考周期】3个月左右 【截稿日期】2022年12月30日 【期刊简介】2.0-3.0&#xff0c;JCR3区&#xff0c;中科院…

unable to find valid certification path to requested target

调用https接口时出现该异常&#xff0c; Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 原因是可以看上图…

介绍一款特别好用的java反编译工具jd-gui

目录 写在前面 开始 写在前面 之前用过另一款java反编译工具jad 但是这个工具有个问题就是对于一些java8的新特性&#xff0c;比如lambda表达式是解析不出来的&#xff0c;更不用说java9和java17了。关于这款工具的使用方法就不再这里赘述了&#xff0c;如果你感兴趣可以在网…

8个关于 Promise.then 和 Promise.catch 的面试题,一定要掌握

前面&#xff0c;我们要讨论了 Promise 在异步编程中的执行&#xff0c;错过的朋友可以直接点击《10 个 JavaScript Promise 的面试题》这篇文章进行查看。 在今天的文章中&#xff0c;我们将讨论这些核心 API 用于 Promise 对象的用法。 这里我提供了10个代码片段&#xff0…