问题描述
新型斐波那契数列的第一、二、三项都为1,从第四项起每一项等于前面三项之和,求此数列第n项模m的余数。
输入格式
输入一行为两个整数n、m,用空格隔开。
输出格式
输出一行为新型斐波那契数列第n项模m的余数。
样例输入
7 3
样例输出
2
数据规模和约定
1 ≤ n ≤ 1018,1 ≤ m ≤ 100
题目链接:新型斐波那契数列
思路:
若直接一个for循环去计算第n项的值,1018会超时。可以根据矩阵的性质以及快速幂的方法去解决。
- 找快速幂的底数矩阵:通过规律我们发现底数矩阵为
{ {0,1,0},{ {0,0,1},{1,1,1}}}

- 找到一般式

- 因为初始矩阵
{ {F1},{F2},{F3}}为{ {1},{1},{1}},所以根据矩阵相乘的性质,实际结果 F n Fn Fn为最终快速幂得到的矩阵的第三行之和。
矩阵相乘代码:
public static int[][] mult(int[][] a, int[][] b) {
int[][] res = new int[3][3];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < 3; k++)
res[i]

该博客介绍了如何利用矩阵快速幂的方法解决新型斐波那契数列中,求第n项模m的余数问题。通过避免简单的循环计算,采用矩阵相乘和快速幂算法,可以高效地处理大数n的情况,确保在1≤n≤1018和1≤m≤100的范围内不会超时。博主给出了矩阵相乘和快速幂的代码实现,并提供了完整的Java程序来解决这个问题。
最低0.47元/天 解锁文章
2810

被折叠的 条评论
为什么被折叠?



