这问题咕咕咕了好久,来填坑了。
问题
求斐波那契数列在模 p 意义下的循环节 m 。
解法
首先知道 fib 通项公式为 f(n)=An−Bn√5 ,其中 A=1+√52,B=1−√52 。
这里有个 √5 ,故要从二次剩余角度去分析。
对于 p=2 和 p=5
直接手玩,可得 p=2 时,m=3 ;p=5 时,m=20 。
对于非 5 的奇质数
1. 若 5 是模 p 意义下的二次剩余
由费马小定理知 Ap−1≡1(mod p),Bp−1≡1(mod p)
则
f(p−1)≡Ap−1−Bp−1√5≡0(mod p)
f(p)≡Ap−Bp√5≡1(mod p)
可发现 (f(0),f(1)) 和 (f(p−1),f(p)) 相等,故 m|p−1 。
2. 若 5 是模 p 意义下的二次非剩余
由欧拉判别准则知 5p−12≡−1(mod p)
Ap=(1+√52)p=(12)p(1+√5)p≡12(1+√5p)≡12(1−√5)≡B(mod p)
同理可得
Bp≡A(mod p)
则
f(2p+1)=A2p+1−B2p+1√5≡B2A−AB2√5≡AB≡1(mod p)
f(2p+2)=A2p+2−B2p+2√5≡0(mod p)
f(2p+3)=f(2p+1)+f(2p+2)≡1(mod p)
可发现 (f(0),f(1)) 和 (f(2p+2),f(2p+3)) 相等,故 m|2p+2 。
对于质数的幂 pk
若 a≡1(mod p) ,则 apk≡1(mod pk+1) 。
证明可用二项式定理,具体地,令 a=px+1 ,则
apk=pk∑i=0(pki)(px)i≡1(mod p)
设在模 p 意义下循环节长度为 m ,在模 pk 意义下循环节长度为 m′ ,则有
f(m)=Am−Bm√5≡0(mod p)
故 Am≡Bm(mod p)
f(m+1)=Am+1−Bm+1√5≡f(1)≡A−B√5(mod p)
故 Am+1−Bm+1−A+B≡0(mod p) ,化简一下,得 (A−B)(Am−1)≡0(mod p)
所以有
Am≡Bm≡1(mod p)
(Am)pk−1≡(Bm)pk−1≡1(mod pk)
很显然了,循环节 m′|mpk−1 。
可断言 m′=mpk−1 (无一反例),但数学界目前暂未证明出来。
对于合数 p=pa11pa22...pakk
我们记 g(p) 表示模 p 意义下的循环节长度,则满足
⎧⎪
⎪
⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪
⎪
⎪⎩f(g(p))≡0(mod pa11)f(g(p)+1)≡0(mod pa11)f(g(p))≡0(mod pa22)f(g(p)+1)≡0(mod pa22)...
显然 g(p)=lcmki=1g(paii) 。
只需要做一次 CRT 即可得到答案。
上界估计
先剔除 pi=2 、 pi=3 和 pi=5 ,则有
g(p)=lcmki=1g(paii)≤lcmki=1(pai−1ig(pi))≤4pk∏i=1pi−12pi
如果加入 pi=2 ,则乘上 3×2ai−1 ;对于 pi=3,5 同理。
故 g(p)≤6×p 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)