如何使用皮萨诺周期求出斐波那契数列之和的最后一位?

How to use the Pisano Period to find the Last Digit of the Sum of Fibonacci Numbers?

我正在学习在线算法课程,我遇到了一个问题,我需要找到第 n 个(当前)数字的斐波那契数和的最后一位。

我需要一些帮助来连接这些点。据我了解,“斐波那契数和的最后一位”问题的解决方案与皮萨诺时期有某种关联。

但是我不太明白那是什么意思。

皮萨诺周期用于计算给定某个极大斐波那契数的某个 m 值的余数,这是先前问题的重点(即,求解 Fn mod m = ???) .

论坛帖子(和指令集)似乎表明长度可以以某种方式帮助我们快速将当前斐波那契的总和归零,而不必通过循环正常地实际建立它。

如果可能的话,我宁愿避免只看别人的解决方案,所以如果有人有任何有用的提示可以帮助我找到缺失的 link,我将不胜感激。

Fibonacci 数的最后一位就是减去 modulo 10 的数字。Pisaso 周期是斐波那契数列重复的周期,modulo 一些基数。所以,如果你对 F(x) mod 10 感兴趣,你就会对 Pisaso Period p(10).

感兴趣

如果我们有这个句点,比如 [1, 5, 2, 7, 0](不是,但为了举例),我们会知道序列中的第 3 个整数结束带有“2”。因为它重复,我们知道第 8 个整数也以“2”结尾,第 13 个...

概括这一点,我们可以说数字 N 的最后一位可以在我们刚刚构建的列表中的第 i 个索引处找到,因为 i 满足 N = 5 * k + i,其中 k 只是任何整数,而 5 来自我们的列表有 5 个元素的事实(因此每 5 个值重复一次)。重写这个,我们可以说 i = N mod 5.

综上所述(剧透),我们只需要找到重复序列 mod 10 的实际值,然后取我们的输入值 N(用于找到 Nth Fibonacci number mod 10),并在索引 N mod len(repeatingSequence) 处索引到所述 repeatingSequence 作为我们的答案。

供参考,对于基数 10,实际重复序列为:

011235831459437077415617853819099875279651673033695493257291