ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)
看到这个标题,貌似很高大上的样子= =,其实这个也是大家熟悉的东西,先给大家科普一下斐波拉契数列。
- 斐波拉契数列
又称黄金分割数列,指的是这样一个数列: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)
- 斐波拉契数列-部分数学规律
偶数项求和
平方求和
- 斐波拉契-卢卡斯数列
|
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
|
…
|
- 与斐波拉契数列的另一个共同性质:
- 中间项的平方数与前后两项之积的差的绝对值是一个恒值
- 黄金特征-----(与例题有关)
- 在一个斐波拉契-卢卡斯数列的无穷大项(记为第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)的更多相关文章
- 【斐波拉契+数论+同余】【ZOJ3707】Calculate Prime S
题目大意: S[n] 表示 集合{1,2,3,4,5.......n} 不存在连续元素的子集个数 Prime S 表示S[n]与之前的所有S[i]互质; 问 找到大于第K个PrimeS 能整除X 的第 ...
- 关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契
牛客A 斐波拉契 链接:https://www.nowcoder.com/acm/contest/181/A来源:牛客网 设f[i]表示斐波那契数论的第i项 f[1]=1,f[2] =1,f[i] = ...
- 关于斐波拉契数列(Fibonacci)
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- python迭代器实现斐波拉契求值
斐波那契数列(Fibonacci sequence),又称黄金分割数列,也称为"兔子数列":F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*).例 ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- 剑指offer三: 斐波拉契数列
斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...
- 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)
递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...
- 剑指offer-面试题9.斐波拉契数列
题目一:写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列的定义如下: { n=; f(n)={ n=; { f(n-)+f(n-) n>; 斐波拉契问题很明显我们会想到用递归来解决: ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
随机推荐
- 开源面向对象数据库 db4o 之旅,第 1 部分: 初识 db4o
前言 业界对持久存储领域的追求从未停止过,为了更方便.更容易地用对象表达我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点.最近一年,业界也在反思,到底 ORM 给我们带 ...
- Django 部署
话说这个部署挺折腾人的,先开始使用 mod_python ,貌似版本一直有问题,没成功过,以后再试. 使用 mod_wsgi 成功,记录如下: 1.下载 mod_wsgi: http://code.g ...
- 使用Javascript实现返回顶部功能。
为了提高网站的浏览体验及友好度,相信大部分网站需要一个返回顶部的按钮,如果使用传统的a标记,再做一个div加上链接的话,非常麻烦,不仅每个页面都需要添加,而且不能实现非常智能的效果及简化维护时间. 下 ...
- 认识ATL窗口
这是一个相当于“Hello world!”的任务,作为认识ATL,考查了其运作流程与机制. 环境:VS2008 创建:新建-项目-Win32项目-添加公用头文件用于(选择ATL). PS:注意新建项目 ...
- Android高仿微信(一)——如何消除启动时的白屏
默认情况下,APP启动时会先把屏幕刷成白色,然后才绘制第一个Activity中的View,这两个步骤之间的延迟会造成启动后先看到白屏(时间大概为1秒左右).时间不长,但是我们也看到,一般的APP时不存 ...
- 实现Android的不同精度的定位(基于网络和GPS)
解决方案: 实现Android的不同精度的定位(基于网络和GPS) Android中的定位服务的相关类基本上都在android.location包中,其中位置服务管理器(LocationManager ...
- css position:absolute 如何居中对齐
写死宽度,就好弄了 position: absolute;left: 50%;width: 980px;margin-left: -490px; text-algin:center
- Java学习之强引用,弱引用,软引用 与 JVM
1.java内存管理分为内存分配和内存回收,都不需要程序员负责. 2.垃圾回收的机制主要是看对象是否有引用指向该对象. java对象的引用包括 强引用 软引用 弱引用 虚引用 3.强引用 是指创建 ...
- Linux下ffmpeg的各种编解码器的安装
首先要安装各种解码器 1.lame tar -zxvf lame- cd lame- ./configure --enable-shared make make install 2.libogg ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...