【斐波那契】

来源:互联网 发布:微信公众号支付java 编辑:程序博客网 时间:2024/04/29 17:02

【模型一】

悟空学艺
monkey.pas/c/cpp

Description
话说当初大闹天宫的猴头反斗精——孙悟空来到了21世纪。当他通过时空隧道来到21世纪时才发现世界发生了翻天覆地的变化。于是他决定来中国的泰山学艺。他在海南腾云驾雾来到泰山脚下,谁知脚下却有两个人把守。他走上前对他们说:“喂!我要见你们的师傅——粉面大秃驴。”那两个人没有搭理他,反而说:“我们的师傅岂是你这个毛猴想见就见的!”孙悟空听了,心中很是愤怒,心想:当初我大闹天宫时,怕过谁!而现在却让这两个毛孩训斥,哼!给你们点厉害瞧瞧。接着,他就掏出金箍棒朝那两个人砸去。可是谁知刚砸到他们面前,却被一道光给挡了回来。原来他们的面前都有一道防护层。“哼!21世纪还用武力解决问题,白痴!”他们不懈的说,“21世纪是智慧的时代,不过,看你是孙悟空的面子上,你只要答对我们的问题,我便放你进去见我们的师傅。”悟空听了,无奈的点了点头,看来只有这样了。“好,猴头,你听好了!这里有一个桃子,我们以下列的方式对它进行变换:

① 开始时,只有一个桃子;
② 每一次变换,把其中的桃子变成桃子和梨,其中的梨变成桃子

我们用‘T’表示桃子,用‘L’表示梨,则经过无数次的变换,我们得到如下字符串“TLTTLTLTTLTTLTLTTLT……”。现在你的任务是:每次给你n个询问,每个询问为:在区间a和b之间有多少个桃子。”孙悟空听了傻了眼,他一个从石头里蹦出来的猴子,哪会这么多东西。可是他必须要去见泰山宗,怎么办呢?看来只有求助于你们了。

Input
第一行是一个整数n,表示有n次提问,后面有n行,每行有两个整数a和b,用空格隔开。

Output
共n行,每行有一个回答,表示在这个区间内有多少个桃子。

Sample Input
1
2 8

Sample Output
4

【数据规模】
  对于100%的数据
  1 < = n <= 5000
  1 <= a <= b < 2^63

T
TL
TLT
TLTTL
TLTTLTLT
TLTTLTLTTLTTL
TLTTLTLTTLTTLTLTTLTLT

总个数和桃子个数都和斐波那契有关,代码略



【模型二】

古代人的难题( puzzlepas/c/cpp)

【题目描述】

门打开了,里面果然是个很大的厅堂。但可惜厅堂内除了中央的一张羊皮纸和一支精致的石笔,周围几具骷髅外什么也没有。难道这就是王室的遗产?小FF不信,他仔细阅读了羊皮纸上的内容后发现,里面书写的古代人一直没能解出的难题,解除这道题目的人只要将答案用石笔写到这张羊皮纸上就能到达王室的宝藏室了。而当小FF拿起石笔后,刚刚打开的巨石门突然关上了;这时小FF意识到原来那几具骷髅是在他之前到这里的冒险者,恐怕是因为没能破解这道题而困死在这里了。小FF越想越害怕,急忙联系到了你,为了能保命,他甚至愿意和你五五分……看来你不得不再次帮他了。羊皮纸上的问题如下:已知xy为整数,且满足以下两个条件:

    1xy[1k],且xykZ

    2.x^2-xy-y^2^2=1

给你一个整数k,求一组满足上述条件的xy并且使得x^2+y^2的值最大。

FF得到答案后,用石笔将答案书写在羊皮纸上,那么就能到达王室的遗产所在地了。

【输入格式】

一个整数k

【输出格式】

输出文件仅一行,两个整数;两个整数分别表示xyxy之间用一个空格隔开。

【输入样例】

 1995

【输出样例】

 1597  987

【数据范围】

对于30%的数据:2k104。

对于100%的数据:2k1018。




【题目简述】

已知xv为整数,且满足以下两个条件:

    1xy[1k],且xykZ

    2(x^2-xy-y^2)^2=1

给你一个整数k,求一组满足上述条件的xy并且使得x^2+ y^2的值最大。

【试题分析】

很明显这是一个数学题,其实这是个Fibomacci数列模型,下面我们来证明下:

    (x^2 - xy - y^2)^2

    = (y^2+ xy - x^2)^2

    =[(x+y)^2-xy-2*x^2]^2

    =[(x+y)^2-(x+y)*x-x^2]^2

由上式可知,如果xy满足条件2,那么x+y,y也满足条件2

那么Fibomacci中小于等于k的最大两个相邻的数即为试题所需的解。

当找出了最大的xy后,x^2+y^2的最大值也确定了。




性质

F[i]=F[i-1]+f[i-2],i>2

3*F[i]=F[i-2]+F[i+2]

2*F[i]=F[i+1]+F[i-2]

F[2N]=F[1]+F[3]+F[5]+F[7].....+F[2N-1]

F[M+N+1]=F[M+1]*F[N+1]+F[M]*F[N]

F[N]*F[N]=F[N-1]*F[N+1]+(-1)^N

gcd(F[N],F[M])=F[gcd(N,M)]


0 0