卢卡斯序列

2013年10月1日

我们在之前的练习中研究了斐波那契数。在今天的练习中,我们将学习一种称为卢卡斯数的斐波那契数的泛化,这是由Edouard Lucas在19世纪末研究的。

回想一下,每个斐波那契数都是前两个斐波那奇数的和,前两个是1和1;因此,斐波那契数列的开头是1、1、2、3、5、8、13、21、34、55…。卢卡斯数的定义相似,但前两个卢卡斯数都是1和3;因此,卢卡斯数从1、3、4、7、11、18、29、47、76……开始,它们的增长速度比斐波那契数更快。

卢卡斯进一步推广了斐波那契数。他定义了两个序列U型n个(P(P),)和V(V)n个(P(P),)如下:以整数开头P(P)令人满意的D类=P(P)2− 4> 0. 然后,通过二次公式x个2价格x+=0是= (P(P)+平方英尺(D类))/2和b条= (P(P)−平方米(D类)) / 2. 然后U型n个(第页,q个) = (n个n个) / (b条)和V(V)n个(P(P),) =n个+n个.

现在斐波那契和卢卡斯数只是U型V(V)序列:斐波那契数列为U型n个(1,-1)和卢卡斯数字是V(V)n个(1, -1).

很容易计算特定的U型V(V)顺序。这些公式类似于计算斐波那契数列的方法:U型(P(P),) =公共事业部−1(P(P),) −问U−2(P(P),)和V(V)(P(P),) =P V(预测值)−1(P(P),) −Q V型−2(P(P),).

计算一个特定的U型V(V)在序列中,使用基于以下恒等式的仅需要对数时间的链:U型2n个=U型n个U型n个,U型2n个+1=U型n个+1 V(V)n个n个,V(V)2n个=V(V)n个2− 2n个、和V(V)2n个+1=V(V)n个+1 V(V)n个P Q公司n个.

您可以在上查看所有这些公式数学世界我们对卢卡斯序列的兴趣不仅仅是学术上的;我们将在未来的练习中看到卢卡斯序列的应用。

您的任务是编写计算U型V(V)序列,并计算两个序列中任意一个的给定元素。完成后,欢迎您阅读运行建议的解决方案,或者发布你自己的解决方案,或者在下面的评论中讨论这个练习。

页:1 2

6对“卢卡斯序列”的回应

  1. 以下是Haskell版本,它提供了两种实现:线性更新
    通常的迭代斐波那契过程,以及类似的(相互)递归过程
    最后一个解决方案。

    进口管制。箭头((&&&))卢卡斯::整数->整数->整数->Integer->整数->[Integer]卢卡斯x0 x1 p q=x0:x1:zipWith(\x y->p*x-q*y)as bs哪里as=卢卡斯x0 x1 pqbs=尾部为u1::整数->整数->[整数]u1=卢卡斯0 1v1::Integer->Integer->[Integer]v1 p=卢卡斯2 p pu2::Integer->Integer->Integer->Integeru2 p q n | n<=0=0|n==1=1|奇数n=u2pq(k+1)*v2pqk-q^k|否则=u2 p q k*v2 p q k哪里k=n`div`2v2::Integer->Integer->Integer-->Integerv2 p q n | n<=0=2|n==1=p|奇数n=v2pq(k+1)*v2pqk-p*q^k|否则=v2 p q k ^2-2*q ^ k哪里k=n`div`2主::IO()main=做设(p,q)=(1,-1)mapM_(print.take 17)[u1 p q,v1 p q]打印$map(u2 p q&&v2 p q)[0..16]
  2. 我现在不在电脑旁,所以我不确定这是否可行,但我更喜欢以下定义(如果可行的话):
    [sourcecode lang=“css”]
    卢卡斯x0 x1 pq=x0:scanl(\xy->p*x–q*y)x1$lucas x0 x1 pq
    [/源代码]

  3. 对手机键盘输入错误表示歉意。

  4. 保罗

    在Python中。

    #参见http://mathworld.wolfram.com/LucasSequence.html定义U(P,Q):“”“生成Lucas U系列-第一项是U1”“”如果P**2-4*Q<=0:提升值错误(“D不是正数”)a、 b=0,1而1:收益率ba、 b=b,P*b-Q*a定义V(P,Q):“”“生成Lucas V系列-第一项是V1”“”如果P**2-4*Q<=0:提升值错误(“D不是正数”)a、 b=2,P而1:收益率ba、 b=b,P*b-Q*a定义Un(P,Q,n):“”“Lucas U的递归公式”“”如果n在(0,1)中:返回nm=无/无2如果n&1:返回Un(P,Q,m+1)*Vn(P,Q,m)-Q**m其他:返回Un(P,Q,m)*Vn(P,Q,m)
  5. 保罗

    哎呀,忘记了卢卡斯五世的递归公式了。

    #请参阅mathworld.wolfram.com/LucasSequence.html定义U(P,Q):“”“生成Lucas U系列-第一项是U1”“”如果P**2-4*Q<=0:提升值错误(“D不是正的”)a、 b=0,1而1:收益率ba、 b=b,P*b-Q*a定义V(P,Q):“”“生成Lucas V系列-第一项是V1”“”如果P**2-4*Q<=0:提升值错误(“D不是正数”)a、 b=2,P而1:收益率ba、 b=b,P*b-Q*a定义Un(P,Q,n):“”“Lucas U的递归公式”“”如果n在(0,1)中:返回nm=无/无2如果n&1:返回Un(P,Q,m+1)*Vn(P,Q,m)-Q**m其他:返回Un(P,Q,m)*Vn(P,Q,m)定义Vn(P,Q,n):“”“Lucas V的递归公式”“”如果n在(0,1)中:返回(2,P)[n]m=无/无2如果n&1:返回Vn(P,Q,m+1)*Vn(P,Q,m)-P*Q**m其他:返回Vn(P,Q,m)**2-2*Q**m

留下评论