首页 > 其他分享 >斐波那契与公约数

斐波那契与公约数

时间:2025-01-05 12:11:28浏览次数:5  
标签:gcd 得证 斐波 Lemma 公约数 那契

斐波那契与公约数

设斐波那契数列第 \(i\) 项为 \(f_i\)。

\[f_i=\begin{cases}1 &(i\leq 2)\\f_{i-1}+f_{i-2} &(i>2)\end{cases} \]

Lemma 1

\[\gcd(f_i,f_{i+1})=1 \]

Proof 1

数学归纳法。当 \(i=1\) 时, \(\gcd(f_1,f_2)=\gcd(1,1)=1\)。

设 \(f_k=a,f_{k+1}=b\),则有 \(f_{k+2}=a+b,f_{k+3}=a+2b\)。

利用更相减损术,可得:

\[\gcd(a+b,a+2b)= \gcd(b,a+b)=\gcd(a,b) \]

于是我们得到

\[\gcd(f_i,f_{i+1})=\gcd(f_{i-1},f_{i}) \]

利用数学归纳,可以得到对于 \(i>1\) 的 \(i\),也满足 \(\gcd(f_i,f_{i-1})=1\)。命题得证。

Lemma 2

\[\gcd(f_n,f_m)=f_{\gcd(n,m)} \]

Proof 2

不妨假设 \(n<m\)。设 \(f_n=a,f_{n+1}=b\),则 \(f_{m}=f_{m-n-1}a+f_{m-n}b=f_{m-n-1}f_n+f_{m-n}f_{n+1}\)。

首先我们有

\[\gcd(kx+y,x)=\gcd((kx+y)\bmod x,x)=\gcd(x,y) \]

那么有

\[\gcd(f_n,f_m)=\gcd(f_{m-n-1}f_n+f_{m-n}f_{n+1},f_n) = \gcd(f_{m-n}f_{n+1},f_n) = \gcd(f_m,f_{m-n}) \]

类似于辗转相除法,可以得到 \(\gcd(f_n,f_m)=\gcd(f_{\gcd(n,m)},f_1)=f_{\gcd(n,m)}\)。命题得证。

标签:gcd,得证,斐波,Lemma,公约数,那契
From: https://www.cnblogs.com/XP3301Pipi/p/18653244

相关文章

  • 数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
    查找(检索):定义:从给定的数据中找到对应的K1,顺序查找:O(n)的从前向后的遍历2,对半查找,要求有序从中间开始查找,每次检查中间的是否正确,不正确就根据性质去左边or右边找2.1对半插入排序在找位置的时候是logn去找,但是最后需要换位置排序之后仍然是O()N^2)对同一序列分别......
  • 矩阵快速幂——斐波那契数列进一步优化
    快速幂优化矩阵幂、乘法对于一般的矩阵计算有\(A_{m,n}*B_{n,p}=C_{m,p}\),其中作为乘积因子的两个矩阵必须满足前因子列数与后因子行数相同积的行数等于前因子的行数,列数等于后因子的列数,任意的\(c_{i,j}\)可由定义的计算得出\(c_{i,j}=\sum_{k=0}^{n}a_{i,k}*b_{k,j}\)......
  • C中如何实现斐波那契数列的迭代和递归算法?
    在C语言中实现斐波那契数列的迭代和递归算法是学习编程和算法设计的重要部分。本文将详细介绍这两种方法的实现原理,并提供具体的代码示例。递归算法递归算法是通过函数调用自身来解决问题的一种方法。对于斐波那契数列,递归算法的实现基于其定义:第n项等于前两项之和。递归算法......
  • P1306 斐波那契公约数
    P1306斐波那契公约数对于Fibonacci数列:\[f_i=\begin{cases}[i=1]&i\leq1\\f_{i-1}+f_{i-2}&i\gt1\end{cases}\]请求出\(f_n\)与\(f_m\)的最大公约数,即\(\gcd(f_n,f_m)\)。数据规模与约定对于\(100\%\)的数据,保证\(1\l......
  • 写一个方法找出两个数的最大公约数
    在前端开发中,你可以使用JavaScript来编写一个方法,用于找出两个数的最大公约数(GCD)。以下是一个使用欧几里得算法(Euclideanalgorithm)的示例:functionfindGCD(a,b){//确保a是较大的数,如果不是则交换a和bif(b>a){lettemp=a;a=b;b=temp;}/......
  • 斐波那契查找算法
    1,什么是斐波那契查找算法?    斐波那契查找算法(FibonacciSearch)是一种基于斐波那契数列的搜索算法。与二分查找算法相比,斐波那契查找更适用于没有直接索引访问的数据结构(如链表)。它通过使用斐波那契数列来逐步缩小搜索范围,从而找到目标元素的位置。斐波那契数列斐......
  • 求最大公约数
    方法一:#include<stdio.h>intmain(){   inta,b;   scanf("%d%d",&a,&b);   inti,max,min;   max=0;  min=(a<b)?a:b;   for(i=1;i<=min;i++)   {      if(a%i==0&&b%i==0)         max=i;   }   prin......
  • 最小(大)栈、求最大公约数、判断一个数是否为2的整数次幂
    2.最小(大)栈问题题目实现一个栈,该栈带有出栈(pop),入栈(push),取最小元素(getMin)3个方法。且要保证这3个方法的时间复杂度都是O(1)。思路1.设原有的栈为main栈,此时创建一个额外的min栈,用于辅助main栈。2.当第1个元素,进main栈时,让该元素,也进入min栈,这个唯一的元素也是main栈的......
  • 动态规划在斐波那契数列中的应用与优化
    文章目录前言......
  • 用C语言输出 -- 斐波那契
    首先,你要明白什么是斐波那契数列:斐波那契数列是指这样一个数列:1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始,每一项都等于前两项之和。源代码如下:#include<stdio.h>intmain(){ inti,n,a=1,b=1,c; printf("输入显示个数\n"); scanf("%d",&n); for(i=1;i<=n;......