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

标签 algorithm fibonacci

我正在参加在线算法类(class),我遇到了一个问题,我需要找到第 n 个(当前)数字的斐波那契数之和的最后一位数字。

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

但是我不太明白这意味着什么。

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

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

如果可能的话,我宁愿避免只看别人的解决方案,所以如果有人有任何有用的提示可以帮助我看到丢失的链接,我将非常感激。

最佳答案

斐波那契数列的最后一位数字就是该数以 10 为模减少的数。皮萨索周期是斐波那契数列以某个底数为模重复的周期。因此,如果您对 F(x) mod 10 感兴趣,您也会对毕萨索周期 p(10) 感兴趣。

如果我们有这个句点,比如 [1, 5, 2, 7, 0] (它不是,但为了举例),我们就会知道序列中的第三个整数以“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) 处索引到所述重复序列以获得我们的答案。

仅供引用,对于基数 10,实际重复序列为:

011235831459437077415617853819099875279651673033695493257291

关于algorithm - 如何使用皮萨诺周期求出斐波那契数列之和的最后一位数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70230332/

相关文章:

algorithm - 使用 Scala 和算法进行锻炼

java - 给定多只股票最大化股票利润

c++ - 斐波那契数列,二分查找

algorithm - 寻找数字的负斐波那契表示的贪心算法?

algorithm - “稀有”排序算法?

algorithm - Fisher-Yates Shuffle 向后执行的正确性

algorithm - 关于优化和决策版本的装箱

c - 我需要帮助调试基本 C 程序来计算斐波那契数

java - NumberFormatException:无限或 NaN

c++ - 斐波那契数列的部分和的最后一位数字