可视化斐波那契数列的最后一位数字

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

如果你写出一系列斐波那契数列,你会发现最后的数字每 60 个数字重复一次。

第 61 个斐波那契数是 2504730781961。第 62 个是 4052739537881。由于这些数以 1 和 1 结尾,因此第 63 个斐波那契数必须以 2 结尾,依此类推,因此模式重新开始。

循环的长度应为 60 并不明显,但很容易看出必须有一个循环。两个连续的数字只有 10*10 种可能性。由于斐波那契数是由两项递归决定的,并且由于总和的最后一位数字由最后一位数字的总和决定,因此最后一位数字的序列最终必须重复。这里的“最终”是指最多 10*10 个词之后。

用上面段落中的任何其他基数替换“10”,以表明最后数字的序列在任何基数中必须是循环的。例如,在 16 进制中,周期是 24。在十六进制表示法中,第 25 个斐波那契数是 12511,第 26 个是 1da31,所以第 27 个必须以 2 结尾,依此类推。

这是一个小的 python 代码,用于查找在任何基数 b 中工作的斐波那契数的最后一位数字的周期。


 from sympy import fibonacci as f

def period(b): for i in range(1, b*b+1): if f(i)%b == 0 and f(i+1)%b == 1: return(i)

这表明以 100 为基数的周期为 300。因此在以 10 为基数的情况下,最后 两位 数字每 300 个术语重复一次。

如下图所示,周期似乎随基数不规律地变化。