原题链接:蓝桥杯2014年第五届真题-斐波那契
A矩阵分解示例
def mm_yu(x,y,mod):
a =[[0,0],[0,0]]
for i in range(2):
for j in range(2):
for k in range(2):
a[i][j] += (x[i][k] * y[k][j])%mod
return a
def quick_mm_yu(M,N,mod):
E = [[1,0],[0,1]]
while N:
if N%2 !=0:
E = mm_yu(E,M,mod)
M = mm_yu(M,M,mod)
N >>=1
return E
def fibonacci_yu(M,n,mod):
f = [[1,0],[1,0]]
return mm_yu(quick_mm_yu(M,n-2,mod),f,mod)[0][0]%mod
def mm(x,y):
a =[[0,0],[0,0]]
for i in range(2):
for j in range(2):
for k in range(2):
a[i][j] += x[i][k] * y[k][j]
return a
def quick_mm(M,N):
E = [[1,0],[0,1]]
while N:
if N%2 !=0:
E = mm(E,M)
M = mm(M,M)
N >>=1
return E
def fibonacci(M,n):
f = [[1,0],[1,0]]
return mm(quick_mm(M,n-2),f)[0][0]
n,m,p = map(int,input().split())
M = [[1,1],[1,0]]
if m>n+2 :
print(fibonacci_yu(M,n+2,p)%p-1)
else:
mod = fibonacci(M,m)
print(fibonacci_yu(M,n+2,mod)%mod%p-1)
参考:
https://blog.dotcpp.com/a/99877
https://blog.csdn.net/flyfish1986/article/details/48014523
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复