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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

如果你写出一系列斐波那契数列,你会发现最后的数字每 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 个术语重复一次。

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


相关文章