首页 > 其他分享 >斐波那契周期性

斐波那契周期性

时间:2024-02-01 15:44:58浏览次数:34  
标签:Fib frac pmod sqrt 斐波 周期性 2p 那契 equiv

斐波那契周期性

定义

\[Fib_1=1,Fib_2=1,Fib_n=Fib_{n-2}+Fib_{n-1} \]

有通项公式:

\[Fib_n=\frac{1}{\sqrt 5}\left(\left(\frac{1+\sqrt 5}{2}\right)^n-\left(\frac{1-\sqrt 5}{2}\right)^n\right) \]

周期的计算

引理1

对于奇素数 \(p\equiv 1\pmod 5\) 或 \(p\equiv 4\pmod 5\),\(p-1\) 是一个周期。

证法一

此证法来自《数论概论》。

因为 \(p\equiv 1\pmod 5\) 或 \(p\equiv 4\pmod 5\),故 \(p\) 是个 \(\text{QR}\)。

根据二次互反律,有:

\[\left(\frac{5}{p}\right)=\left(\frac{p}{5}\right)=\left(\frac{p\bmod 5}{5}\right)=\left(\frac{1}{5}\right)\text{或}\left(\frac{4}{p}\right)=1 \]

故 \(5\) 为模 \(p\) 的二次剩余,于是存在整数 \(c^2\equiv 5\pmod p\)。由于 \(p\nmid c\) 且 \(p\) 是质数,\(c\) 存在逆元 \(c^{-1}\)。

我们定义模 \(p\) 意义下的序列 \(J\):

\[J_n\equiv c^{-1}\Bigg(\left(\frac{1+c}{2}\right)^n-\left(\frac{1-c}{2}\right)^n\Bigg) \]

由 \(c^2\equiv 5\pmod p\) 可知:

\[J_1\equiv J_2\equiv 1\pmod p,J_n\equiv J_{n-2}+J_{n-1}\pmod p \]

于是 \(J\) 和 \(Fib\) 有相同的初值和递归关系,故有:

\[J_n\equiv Fib_n\pmod p \]

我们记 \(U=\dfrac{p+1}{2},V=\dfrac{p-1}{2}\)

有:

\[Fib_n\equiv c^{-1}\left(U^n-V^n\right)\pmod p \]

由费马小定理可知:

\[\begin{aligned} Fib_{i+(p-1)j}&\equiv c^{-1}\left(U^{i+(p-1)j}-V^{i+(p-1)j}\right)\pmod p\\ &\equiv c^{-1}\left(U^i-V^i\right)\pmod p\\ &\equiv Fib_i \end{aligned}\]

即模 \(p\) 每 \(p-1\) 循环一个,即 \(p-1\) 是周期。

证法二

该证法来自 OIwiki

由 \(C_n^m\) 计算式知:当 \(0<i<p\) 时,\(C_p^i\equiv 0\pmod p\)。

我们直接把 \(Fib_n\) 按照定义展开:

\[\begin{aligned} Fib_p&=\frac{\sum\limits_{i=0}^{p}C_p^i\sqrt 5^i-\sum\limits_{i=0}^{p}C_p^i(-\sqrt 5)^i}{2^p\sqrt5}\\ &\equiv \frac{C_p^0\sqrt5^0+C_p^p\sqrt5^p-(C_p^0(-\sqrt5)^0+C_p^p(-\sqrt5)^p)}{2^p\sqrt5}\pmod p\\ &\equiv \frac{\sqrt5^p+\sqrt5^p}{2^p\sqrt5}\pmod p\\ &\equiv \frac{\sqrt5^{p-1}}{2^{p-1}}\pmod p \end{aligned}\]

由费马小定理,有 \(2^{p-1}\equiv 1\pmod p\);\(5\) 为模 \(p\) 意义下的二次剩余,根据欧拉准则,有 \(5^{\tfrac{p-1}{2}}\equiv 1\pmod p\),故:

\[Fib_p\equiv \sqrt5^p-1\equiv 5^{\tfrac{p-1}{2}}\equiv 1\pmod p \]

用相似的方法展开 \(Fib_{p+1}\),发现 \(Fib_{p+1}\equiv 1\pmod p\)。

故 \(Fib_{p}\) 和 \(Fib_{p+1}\) 两项都同余 \(1\),与 \(Fib_1\) 和 \(Fib_2\) 一致,故 \(p-1\) 是周期。

引理2

对于奇素数 \(p\equiv 2\pmod 5\) 或 \(p\equiv 3\pmod 5\),\(2p+2\) 是一个周期。

证明:

该证法来自 OIwiki

相似的,我们直接展开 \(Fib_{2p}\) 和 \(Fib_{2p+1}\):

\[\begin{aligned} Fib_{2p}&=\frac{2}{2^{2p}\sqrt 5}\left(C_{2p}^1\sqrt 5+C_{2p}^3\sqrt 5^3+\dots C_{2p}^{2p-1}\sqrt 5^{2p-1}\right)\\ &\equiv \frac{1}{2^{2p-1}\sqrt 5}C_{2p}^{p}\sqrt5^p\pmod p \end{aligned}\]

可以验证,\(Fib_{2p}\) 的式子模了 \(p\) 之后只有 \(C_{2p}^{p}\) 项留了下来,又:

\[C_{2p}^p=\sum_{i=0}^{p}(C_p^i)^2 \]

故:

\[C_{2p}^p\equiv (C_p^0)^2+(C_p^p)^2\equiv 2\pmod p \]

所以根据费马小定理,有 \(2^{2p-2}\equiv 1\pmod p\);而 \(5\) 又是模 \(p\) 下的二次非剩余,根据欧拉准则,有 \(5^{\tfrac{p-1}{2}}\equiv -1\pmod p\),故:

\[Fib_{2p}\equiv \frac{\sqrt5^{p-1}}{2^{2p-2}}\equiv \sqrt5^{p-1}\equiv 5^{\tfrac{p-1}{2}}\equiv -1\pmod p \]

用相似的方法展开 \(Fib_{2p+1}\),套一些组合数的性质,发现 \(Fib_{2p+1}\equiv 1\pmod p\)。

而我们根据 \(Fib_{n}=Fib_{n-2}+Fib_{n-1}\),可以倒着推出来 \(Fib_{-2}=-1,Fib_{-1}=1\)。

故 \(Fib_{p}\) 和 \(Fib_{p+1}\) 两项,与 \(Fib_{-2}\) 和 \(Fib_{-1}\) 一致,故 \(2p+2\) 是周期。

引理3

来自于这篇博客

若 \(a\equiv 1\pmod p\),则 \(a^{p^k}\equiv1\pmod {p^{k+1}}\)

证明:

归纳证明法。假设对于 \(k-1\) 成立,即:

\[a^{p^{k-1}}\equiv 1\pmod {p^k} \]

我们设:

\[a^{p^{k-1}}=tp^k+1 \]

则:

\[a^{p^k}=(a^{p^{k-1}})^p=(tp^k+1)^p= \sum_{i=0}^{p}(tp^k)^i \]

在模 \(p^{k+1}\) 意义下,\(i\ge1\) 的项都没了,于是:

\[a^{p^k}\equiv (tp^k)^0\equiv 1\pmod {p^{k+1}} \]

证毕。

引理4

来自于这篇博客

若 \(p\) 为奇素数,\(p\) 的循环节为 \(t\),那么有 $ tp^{k-1}$ 是\(p^k\) 的循环节。

证明:

我们记 \(U=\dfrac{1+\sqrt 5}{2},V=\dfrac{1-\sqrt 5}{2}\)

根据 \(t\) 为 \(p\) 的循环节,我们有:

\[0\equiv Fib_t \equiv \frac{1}{\sqrt 5}\Big(U^t-V^t\Big) \equiv U^t-V^t\pmod p \]

故:

\[U^t\equiv V^t\pmod p \]

又:

\[\begin{aligned} 1&\equiv Fib_{t+1}\equiv \frac{1}{\sqrt 5}\Big(U^{t+1}-V^{t+1}\Big) \equiv \frac{1}{\sqrt 5}\Big(U^t\cdot U-V^t\cdot V\Big)\\ &\equiv \frac{1}{\sqrt 5}\Big(U^t\cdot U-U^t\cdot V\Big)\equiv U^t\frac{1}{\sqrt 5}(U-V)\equiv U^tFib_1 \end{aligned}\]

因为 \(Fib_1\equiv 1\pmod p\),故 \(U^t\equiv V^t\equiv 1\pmod p\)

根据引理3,有:

\[U^{tp^{k-1}}\equiv V^{tp^{k-1}}\equiv 1\pmod {p^{k}} \]

这蕴含着:

\[Fib_{tp^{k-1}}\equiv \frac{1}{\sqrt 5}(U^{tp^{k-1}}-V^{tp^{k-1}})\equiv 0\pmod {p^k} \]

\[\begin{aligned} Fib_{tp^{k-1}+1}&\equiv \frac{1}{\sqrt 5}(U^{tp^{k-1}+1}-V^{tp^{k-1}+1})\equiv \frac{1}{\sqrt 5}(U^{tp^{k-1}}\cdot U-V^{tp^{k-1}}\cdot V)\\ &\equiv \frac{1}{\sqrt 5}(U^{tp^{k-1}}\cdot U-U^{tp^{k-1}}\cdot V)\equiv U^{tp^{k-1}} \frac{1}{\sqrt5}(U-V)\\ &\equiv U^{tp^{k-1}}Fib_1\equiv 1\pmod {p^k} \end{aligned}\]

即 \(tp^{k-1}\) 是模 \(p^k\) 的循环节。


综合上述四个引理,我们就找到了一种计算斐波那契在模 \(m\) 意义下的循环节(注意,不是最小的)的方法:

  • 对 \(m\) 分解质因数:\(m=\prod\limits_{i=1}^{w}p_i^{c_i}\)

  • 枚举 \(m\) 的每个质因子 \(p_i\),根据引理1和2,计算模 \(p_i\) 意义下的循环节 \(t_i\)。(特别的,若 \(p_i=2\),则循环节为 \(3\);若 \(p_i=5\),则循环节为 \(20\))

  • 根据引理3,计算出模 \(p_i^{c_i}\) 意义下的循环节 \(T_i=t_ip_i^{c_i-1}\)。

  • 最后,计算模 \(m\) 意义下的循环节 \(T=\operatorname{lcm}_{i=1}^{w}T_i\) 即可。

标签:Fib,frac,pmod,sqrt,斐波,周期性,2p,那契,equiv
From: https://www.cnblogs.com/baoyangawa/p/18001411

相关文章

  • RocketMQ应用-实现周期性自动任务
    应用背景提供配置功能,用于固定周期的执行某个动作;如在基金交易的每个交易日结束时,需要根据当天交易量计算基金的收益,可以提供定时任务,在每天晚上固定的时间计算收益数据。功能设计提供任务数据表task_info和任务执行记录表task_log_info;通过扫描task_info表中所有的任务配置数......
  • P1962 斐波那契数列(矩阵快速幂)
    #include<bits/stdc++.h> #defineintlonglong usingnamespacestd; intn,a[3],m=1e9+7,c[3][3],b[3][3],x[3][3],a1[3]; voidfirst() { for(inti=1;i<=2;i++) for(intj=1;j<=2;j++)x[i][j]=0; for(inti=1;i<=2;i++) ......
  • 算法学习Day38斐波那契数、爬楼梯
    Day38斐波那契数、爬楼梯ByHQWQF2024/01/22笔记509.斐波那契数斐波那契数,通常用 F(n)表示,形成的序列称为斐波那契数列。该数列由 0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1) =1F(n)=F(n-1)+F(n-2),其中n>1给你n,请计算F(......
  • AcWing 717. 简单斐波那契
    AcWing717.简单斐波那契以下数列01123581321...被称为斐波纳契数列。这个数列从第33项开始,每一项都等于前两项之和。输入一个整数\(N\),请你输出这个序列的前\(N\)项。输入格式一个整数\(N\)。输出格式在一行中输出斐波那契数列的前\(N\)项,数字之间用......
  • 时间复杂度(斐波那契)和空间复杂度
    1.0时间复杂度(斐波那契)//计算阶层递归Fac的时间复杂度longlongFac(size_tN){if(0==N)return1;returnFac(N-1)*N;}该算法的时间复杂度度很稳定:O(N)//计算斐波那契数列递归Fib的时间复杂度longlongFib(size_tN){if(N<3)return1;returnFib(N-1)+......
  • Halo2简单使用-斐波那契数列
    电路设计Halo2是基于PLONK算法的零知识证明框架,使用Rust语言。在Halo2中要证明你掌握斐波那契数列,例如Fib(10)=55。则需要将你的每一步计算过程(秘密的)罗列出来。并由程序(电路)来进行验证,生成证明。在PLONK算法里,我们使用表格来进行计算跟踪,例如:abc112123235358581381321132134......
  • Halo2简单应用-斐波那契示例
    电路设计Halo2是基于PLONK算法的零知识证明框架,使用Rust语言。在Halo2中要证明你掌握斐波那契数列,例如Fib(10)=55。则需要将你的每一步计算过程(秘密的)罗列出来。并由程序(电路)来进行验证,生成证明。在PLONK算法里,我们使用表格来进行计算跟踪,例如:abr112123......
  • Java-与斐波那契数列相关的变体问题
    变体问题指的是提问的方式不一样了,但是解决问题的方法还是用斐波那契数列来解。——写在前面的话。一、变体1-兔子问题1.问题描述第一个月,有一对未成熟的兔子第二个月上述的一对兔子成熟第三个月,他们能产下一对小兔子所有兔子遵循相同规律,求第n个月的兔子个数2.分析例子假设我要求......
  • Java-用递归的思想求斐波那契数列第n项的值
    一、思想-多路递归多路递归multirecursion就是在每次递归时包含多次(大于一次)的自身调用。也就是一个问题会被拆分成多个子问题。多路递归比单路递归在分析时间复杂度上比较复杂一些。二、斐波那契数列三、例子以n=4为例,当我们用下面(第四部分)的代码实现时,这个多路递归的求解过......
  • C练习题——打印第n个斐波那契数
    斐波那契数列:1123581321...规律:从第三个数开始,第n个数为前两数之和#include<stdio.h>intmain(){intn=0;scanf("%d",&n);inta=1;intb=1;intc=1;while(n>=3){c=a+b;a=b;......