看到这个标题,貌似很高大上的样子= =,其实这个也是大家熟悉的东西,先给大家科普一下斐波拉契数列

  • 斐波拉契数列

    又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

    在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)

    在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

  • 斐波拉契数列与黄金分割-----(涉及今天的例题)

    有趣的是:这样一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618.(或者说后一项与前一项的比值小数部分越来越逼近黄金分割0.618、前一项与后一项的比值越来越逼近黄金分割0.618)

    1÷1=1,1÷2=0.5,2÷3=0.666...,3÷5=0.6,5÷8=0.625,…………,55÷89=0.617977…,…………144÷233=0.618025…46368÷75025=0.6180339886…...
    越到后面,这些比值越接近黄金比.
 
  • 斐波拉契数列-部分数学规律

          偶数项求和

 

          平方求和

 
 

 
  以下正式入题啦~
  • 斐波拉契-卢卡斯数列
    卢卡斯数列1、3、4、7、11、18…,也具有斐波那契数列同样的性质。(我们可称之为斐波那契—卢卡斯递推:从第三项开始,每一项都等于前两项之和f(n) = f(n-1)+ f(n-2)。
    这两个数列还有一种特殊的联系(如下表所示),F(n)*L(n)=F(2n),及L(n)=F(n-1)+F(n+1)
n
1
2
3
4
5
6
7
8
9
10
斐波那契数列F(n)
1
1
2
3
5
8
13
21
34
55
卢卡斯数列L(n)
1
3
4
7
11
18
29
47
76
123
F(n)*L(n)
1
3
8
21
55
144
377
987
2584
6765
    类似的数列还有无限多个,我们称之为斐波那契—卢卡斯数列
    如1,4,5,9,14,23…,因为1,4开头,可记作F[1,4],斐波那契数列就是F[1,1],卢卡斯数列就是F[1,3],斐波那契—卢卡斯数列就是F[a,b]。
    

  • 与斐波拉契数列的另一个共同性质:  
  • 中间项的平方数与前后两项之积的差的绝对值是一个恒值
    斐波那契数列:|1*1-1*2|=|2*2-1*3|=|3*3-2*5|=|5*5-3*8|=|8*8-5*13|=…=1
    卢卡斯数列:|3*3-1*4|=|4*4-3*7|=…=5
    F[1,4]数列:|4*4-1*5|=11
    F[2,5]数列:|5*5-2*7|=11
    F[2,7]数列:|7*7-2*9|=31
  • 黄金特征-----(与例题有关)
    斐波那契数列这个值是1最小,也就是前后项之比接近黄金比例最快,我们称为黄金特征
    黄金特征1的数列只有斐波那契数列,是独生数列。卢卡斯数列的黄金特征是5,也是独生数列。
    前两项互质的独生数列只有斐波那契数列和卢卡斯数列这两个数列。
 

 
  应用例题:
    
 
    
    题意:大致就是给定一个斐波拉契-卢卡斯数列中的某一项an(题目没有说明,但是这其实就是斐波拉契卢卡斯数列),然后让你求出初始的斐波拉契-卢卡斯数列a1和a2的值,并使得a2尽可能小。
 
    我用的是数学规律的思路
  • 在一个斐波拉契-卢卡斯数列的无穷大项(记为第m项),则第m-1项除以m项一定无限接近黄金分割0.618---可以计算倒数第二项的模糊值(设为a)
  • 且m足够大时,(m-1)/m>=0.618
  • 需要注意:在m值较大时,(m-1)/m即便很接近0.618,但m值太大,因此0.618*m得到的模糊值也会有较大误差,所以需要a++直到找到最适合的前两项
  • 上一点注意的详细公式是:小于两倍的sqrt(n)。
 //斐波拉契-卢卡斯数列
//Memory 1100 K,Time: 234 Ms
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; #define INF 0x3f3f3f3f int m1,m2; //让第二项最小的初始两项 //计算初始两项并刷新最适合的m1,m2
void compute(int a,int b,int t)
{
while(t <= a && t >= )
{
b = a;
a = t;
t = b - a;
}
if(m2 > b)
{
m1 = a;
m2 = b;
}
} int main()
{
int T,n;
scanf("%d",&T); while(T--)
{
int a,t;
scanf("%d",&n);
a = (int)(0.618*n)-; //倒数第二项模糊值 m1 = m2 = INF;
int i = -;
while(a+(++i) <= n && i <= (int)*sqrt(n)) //倒数第二项小于最后一项,且次数小于2*sqrt(n)
{
compute(a+i,n,n-a-i);
} printf("%d %d\n",m1,m2);
} return ;
}

  上述Code的 i <= (int)2*sqrt(n)的不等式是小编试出来的,测试数据在这些次数内可以过,如果不加的话,肯定是TLE的。

  大家如果有更加合适的Code可以写在评论里面(⊙o⊙)哦~,小编太渣了,没有更加清楚明白的思路= =

  Fighting~


ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)的更多相关文章

  1. 【斐波拉契+数论+同余】【ZOJ3707】Calculate Prime S

    题目大意: S[n] 表示 集合{1,2,3,4,5.......n} 不存在连续元素的子集个数 Prime S 表示S[n]与之前的所有S[i]互质; 问 找到大于第K个PrimeS 能整除X 的第 ...

  2. 关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契

    牛客A 斐波拉契 链接:https://www.nowcoder.com/acm/contest/181/A来源:牛客网 设f[i]表示斐波那契数论的第i项 f[1]=1,f[2] =1,f[i] = ...

  3. 关于斐波拉契数列(Fibonacci)

    斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...

  4. python迭代器实现斐波拉契求值

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例 ...

  5. 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)

    对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...

  6. 剑指offer三: 斐波拉契数列

    斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...

  7. 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)

    递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...

  8. 剑指offer-面试题9.斐波拉契数列

    题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...

  9. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

随机推荐

  1. jquery 中一些 特殊方法 的特殊使用 一览表

    cnblogs的页面, 一种是管理页面, 是随笔的列表 a full list of essays. 另一种是 首页. 要搜索文档的话, 就使用 "首页"的那种方式. 一个jque ...

  2. thinkphp笔记16-20集

    16.ThinkPHP3.1.3使用视频教程--独立分组配置项与目录部署详解_高清 17.ThinkPHP3.1.3使用视频教程--RBAC详解(一)思路分析_高清 18.ThinkPHP3.1.3使 ...

  3. php-fpm服务启动脚本

    在php-fpm还是打补丁的时候,php-fpm重启只需要执行php-fpm restart或者reload, 自从php5.3之后,php-fpm的启动和停止显得比较麻烦,特意改写了一份nginx的 ...

  4. PostgreSQL建立分区表示例

    pgsql 分区表: --主表 create table test(id integer, name varchar(32)); create index idx_test_id on test us ...

  5. 1.2 从 ACID 到 CAP/BASE

    1.事务 事务(Tranction)是指,由一系列对系统中数据进行访问与更新操作,所组成的一个逻辑执行单元.狭义上的事务是指数据库事务. 事务有四个特性. 原子性:原子性要求事务只允讲有两种状态,全部 ...

  6. servlet和http请求

    1.servlet servlet是和平台无关的服务器组件,可以交互式的来浏览和修改数据,生成动态的web内容.它运行于 servlet容器中2.servlet容器 servlet容器负责servle ...

  7. Spring 事务知识

    1.1  Spring注解的各种行为 事物传播注解: @Transactional(propagation=Propagation.REQUIRED) (常用) 如果有事务, 那么加入事务, 没有的话 ...

  8. Web项目,F12调试的说明

    sessionstorage,localstorage和cookie之间的区别 区别:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递.而sess ...

  9. MySQL的InnoDB索引原理详解 (转)

    摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本 ...

  10. 写给喜欢用Block的朋友(ios Block)

    作者:fengsh998原文地址:http://blog.csdn.net/fengsh998/article/details/38090205转载请注明出处如果觉得文章对你有所帮助,请通过留言或关注 ...