M斐波那契数列

文章介绍了如何使用矩阵快速幂的方法来解决M斐波那契数列问题,涉及到斐波那契数列的矩阵运算、快速幂算法以及费马小定理。通过分析和计算,给出了在大数范围内的高效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

M斐波那契数列


题目传送门

Problem Description

M斐波那契数列F[n]是一种整数数列,它的定义如下:

F[0] = a
F1 = b
F[n] = F[n-1] * F[n-2] ( n > 1 )

现在给出a, b, n,你能求出F[n]的值吗?


Input

输入包含多组测试数据;
每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 )


Output

对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,每组数据输出一行。


Sample Input

0 1 0
6 10 2


Sample Output

0
60


题目解决

题目分析:

  1. 注意到n的范围最大到10^9,所以简单的进行递推时间和空间上都无法处理到限制范围内.
  2. 这道题涉及到取余运算,所以我们应该知道取余运算的其中一个性质:
    (ab)modp=((amodp)(bmodp))modp ( a ∗ b ) mod p = ( ( a mod p ) ∗ ( b mod p ) ) mod p
  3. 注意到该递推式和斐波那契数列有相似之处.

知识点:

1.斐波那契数列的矩阵运算

1.斐波那契数列

fib(0)=0 f i b ( 0 ) = 0
fib(1)=1 f i b ( 1 ) = 1
fib(n)=fib(n1)+fib(n2) f i b ( n ) = f i b ( n − 1 ) + f i b ( n − 2 )

n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n-1 n
fib(n) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 fib(n-1) fib(n)
2.将斐波那契数列写到矩阵中
1.考虑按照以下表达式构造n个矩阵:

An=[fib(n)fib(n+1)fib(n+1)fib(n+2)] A n = [ f i b ( n ) f i b ( n + 1 ) f i b ( n + 1 ) f i b ( n + 2 ) ]

2.得到如下矩阵

A0=[0111] A 0 = [ 0 1 1 1 ]   A1=[1112] A 1 = [ 1 1 1 2 ]   A2=[1223] A 2 = [ 1 2 2 3 ]   A3=[2335] A 3 = [ 2 3 3 5 ]   A4=[3558] A 4 = [ 3 5 5 8 ] …   …   …

An=[fib(n)fib(n+1)fib(n+1)fib(n+2)] A n = [ f i b ( n ) f i b ( n + 1 ) f i b ( n + 1 ) f i b ( n + 2 ) ]

3.矩阵乘法运算

A1=[1112]=A0A0 A 1 = [ 1 1 1 2 ] = A 0 A 0     A2=[1223]=A0A0A0 A 2 =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值