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

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

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);}
}

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

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

相关文章

037_自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)

#!/bin/bash#设置变量定义需要添加到防火墙规则的服务和端口号#使用 firewall-cmd --get-services 可以查看 firewall 支持哪些服务 service"nfs http ssh"port"80 22 8080" #循环将每个服务添加到防火墙规则中for i in $servicedo echo "Adding …

Vijos 1334 ---- NASA的食物计划(01背包强化)

背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以后发生&#xff0c;谁也无法保证,在遇到这类航天问题时,解决方法也许只能让航天员出仓维修,但是多次的维修会消耗航天员大量的能量…

大家好

2017****1016&#xff0c;我叫李双阳&#xff0c;我的爱好是滑板我的码云个人主页是&#xff1a;https://gitee.com/LSY_IT我的第一个项目地址是&#xff1a;https://gitee.com/LSY_IT/the_play_is_useless *目前代码量有150行了&#xff1b;我最喜欢大鸡腿&#xff1b;JAVA真难…

PAT L3-015 ---- 球队“食物链”(DFS)

球队“食物链” 某国的足球联赛中有N支参赛球队&#xff0c;编号从1至N。联赛采用主客场双循环赛制&#xff0c;参赛球队两两之间在双方主场各赛一场。 联赛战罢&#xff0c;结果已经尘埃落定。此时&#xff0c;联赛主席突发奇想&#xff0c;希望从中找出一条包含所有球队的“…

samba配置

samba配置&#xff1a; sudo ufw disable //关闭防火墙 sudo ufw enable //开启 sudo ufw status //查看状态 sudo vim /etc/samba/smb.conf # # Sample configuration file for the Samba suite for Debian GNU/Linux. # # # This is the main Samba configura…

21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

21.Merge Two Sorted Lists 初始化一个指针作为开头&#xff0c;然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* dummy new ListNode(-1);ListNode* p dummy;while(l1 && l2){if(l1->val < …

求最大公约数----辗转相除法

辗转相除法&#xff08;求最大公倍数&#xff09; 一般写法&#xff1a; public class Main {public static void main(String[] args) {System.out.println(gcd(18, 2));}private static int gcd(int a, int b) {// TODO Auto-generated method stubwhile (b ! 0) {int c a…

使用kubeadm安装kubernetes高可用集群

kubeadm安装kubernetes高可用集群搭建 第一步&#xff1a;首先搭建etcd集群yum install -y etcd配置文件 /etc/etcd/etcd.confETCD_NAMEinfra1 ETCD_DATA_DIR"/var/lib/etcd" ETCD_LISTEN_PEER_URLS"https://172.20.0.113:2380" ETCD_LISTEN_CLIENT_URLS&q…

蓝桥杯第七届国赛JAVA真题----平方末尾

平方末尾 能够表示为某个整数的平方的数字称为“平方数” 比如&#xff0c;25,64 虽然无法立即说出某个数是平方数&#xff0c;但经常可以断定某个数不是平方数。 因为平方数的末位只可能是&#xff1a;[0, 1, 4, 5, 6, 9] 这6个数字中的某个。 所以&#xff0c;432543533…

紫书 团队队列(队列)

1.用两个队列来维护成员&#xff0c;一个队列维护队伍编号&#xff0c;一个队列数组维护每个队伍的成员 ps: 紫书p118 #include <bits/stdc.h> using namespace std;int t, k, x, y; queue<int> allq; queue<int> q[12]; vector<int> v; string s1&quo…

蓝桥杯第七届国赛JAVA真题----七星填数

七星填数 如图【图1.png】所示。 在七角星的14个节点上填入1~14 的数字&#xff0c;不重复&#xff0c;不遗漏。 要求每条直线上的四个数字之和必须相等。 图中已经给出了3个数字。 请计算其它位置要填充的数字&#xff0c;答案唯一。 填好后&#xff0c;请提交绿色节点的4个…

Codeforces Round 546 (Div. 2)

layout: post title: Codeforces Round 546 (Div. 2) author: "luowentaoaa" catalog: true tags: mathjax: true - codeforces - 贪心 - 数学 - 线段树 传送门 A - Nastya Is Reading a Book (签到) 题意 给出每一章的页数范围&#xff0c;然后告诉你当前看到那一页…

洛谷 P1219 ---- 八皇后

题目描述 检查一个如下的6 x 6的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列2 4 6 1 3 5来描述&#xff0c;第i个数字表示在第i行…

PXE(preboot execution environment):【网络】预启动执行环节:引导 live光盘 ubuntu livecd 16.4:成功...

default menu.c32label ubuntu menu label ubuntu (version 16.04) kernel ub1604/casper/vmlinuz append root/dev/nfs bootcasper netbootnfs nfsroot192.168.56.1:/e/_temp/ub1604 initrdub1604/casper/initrd quiet splash --# 关键是搭建nfs相应的服务器器并export解压后的…

PHP实现多文件上传

PHP文件上传流程 单击提交按钮&#xff0c;浏览器用户将包含上传文件的表单数据提交给PHP处理程序Web服务器和PHP预处理器首先判断表单数据的大小是否超过php.ini配置文件中的post_max_size选项设置的上限值。 若超过&#xff0c;PHP处理程序将无法得到任何表单数据&#xff0…

bzoj5324:[Jxoi2018]守卫

传送门 首先考虑定下一个端点&#xff0c;然后剩下的就可以递推了 一开始想的是定下左端点&#xff0c;然后预处理出位置最远能看到的位置&#xff0c;后来发现时间GG了 看题解发现定右端点优秀得多 记录下当前\(r\)最远能看到的位置\(p\)&#xff0c;能看到\([p,r]\)一共需要几…

蓝桥杯第八届省赛JAVA真题----分巧克力

标题&#xff1a; 分巧克力 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力&#xff0c;其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克…

蓝桥杯第八届省赛JAVA真题----油漆面积

标题&#xff1a;油漆面积 X星球的一批考古机器人正在一片废墟上考古。 该区域的地面坚硬如石、平整如镜。 管理人员为方便&#xff0c;建立了标准的直角坐标系。 每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。 经过各种测量&#xff0c;每个机器人都会报告…

练习2——顺序表

//实现顺序表基本功能&#xff0c;然两个顺序表相并 #include <iostream> #include <stdlib.h> using namespace std; typedef int T; class SeqList{T *data;int MaxSize;int last; public:SeqList(int sz);~SeqList(){delete [] data;}int Length() const {retur…

docker占满linux磁盘根目录的解决办法

一、磁盘根目录被占满 [testlocalhost docker]$ df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 50G 0G 100% / devtmpfs 7.7G 0 7.7G 0% /dev tmpfs 7.8G 0 7.8G 0…