Algorithm 斐波那契数的幂和?
如何求这个级数的和Algorithm 斐波那契数的幂和?,algorithm,fibonacci,Algorithm,Fibonacci,如何求这个级数的和 fib(0)^K + fib(C)^K + fib(2*C)^K + fib(3*C)^K + ... + fib(N*C)^K 其中约束为0
fib(0)^K + fib(C)^K + fib(2*C)^K + fib(3*C)^K + ... + fib(N*C)^K
其中约束为0
,0
和0
这里
fib(i)
是第i个fibonacci数,其中fib(0)=0
,fib(1)=1
和fib(n)=fib(n-1)+fib(n-2)
。我们必须计算求和模100000007(10^9+7)。这基本上是一个处理递归关系的练习。要理解这个答案,您应该能够自如地在矩阵和系统形式之间切换
首先,我们得到了fib(i)^K的一个递归。这实际上涉及到一个系统的复发fib(i)^K,fib(i)^(K-1)fib(i-1),fib(i)^(K-2)fib(i-1)^2,…,fib(i-1)^K
。我将为K=3
演示
fib(i)^3 = (fib(i-1) + fib(i-2))^3
= fib(i-1)^3 + 3 fib(i-1)^2 fib(i-2) + 3 fib(i-1) fib(i-2)^2 + fib(i-2)^3
fib(i)^2 fib(i-1) = (fib(i-1) + fib(i-2))^2 fib(i-1)
= fib(i-1)^3 + 2 fib(i-1)^2 fib(i-2) + fib(i-1) fib(i-2)^2
fib(i) fib(i-1)^2 = (fib(i-1) + fib(i-2)) fib(i-1)^2
= fib(i-1)^3 + fib(i-1)^2 fib(i-2)
fib(i-1)^3 = fib(i-1)^3
这些可以组合成一个矩阵
[fib(i)^3 fib(i)^2 fib(i-1) fib(i) fib(i-1)^2 fib(i-1)^3] =
i
= [fib(0)^3 fib(0)^2 fib(-1) fib(0) fib(-1)^2 fib(-1)^3] [1 0 0 0]
[3 1 0 0]
[3 2 1 0]
[1 1 1 1]
i
= [0 0 0 1] [1 0 0 0]
[3 1 0 0]
[3 2 1 0]
[1 1 1 1]
你可以认出那边的帕斯卡三角形
现在,给定一个函数f(i)
的递归系统,我们可以通过将矩阵提升到幂c
来计算f(ci)
的递归
最后一步是从f(i)
的重复到f(i)=f(0)+f(1)+……+f(i-1)
。添加一个方程式很简单
F(i) = F(i-1) + f(i-1)
与系统的连接
计算完矩阵后,根据我的估计,该矩阵最多包含
12^2=144
个元素,我们可以使用快速矩阵求幂mod10^9+7
计算适当的幂。注意隐藏的一个错误–这就是你想要的F(n+1)
。这个问题可能更适合,因为这个问题可能需要更深入地理解斐波那契级数、幂和等,而不是算法。可能会让你走上正确的方向,尽管这只是针对K=2
和C=1
…如何定义fib(i)
?它是第i个斐巴诺契数吗?它是比我小的最接近的Fibanocci数吗?如果是前者,我怀疑N
的约束是否合理。这听起来像是在HackerRank或类似网站上找到的东西。你能分享原始问题的链接吗?欢迎使用堆栈溢出!请告诉我们你试过什么。这是你的问题。