特征根法--递推数列前4列
来源:互联网 发布:淘宝旺旺怎么加好友 编辑:程序博客网 时间:2024/06/07 20:07
问题概述:求出第n个斐波那契数列的前4位,其中a[0]=0、a[1]=1,n可高达100000000
输入样例: 对应输出:
35 9227
参考资料:http://blog.csdn.net/u013486414/article/details/46834111
此题难点:将递推公式化为通项公式(特征根法),并化简通项公式
入门特征根法:
一阶线性递推式a[n+1] = c*a[n]+d(c、d为任意常数)求法:
①设方程 x = c*x+d 解出 x = x0
②则a[n]的通项公式就为 a[n] = b[n]+x0(其中b[n]为等比数列)
③通过已知的a[1]和a[2]即可求出b[1]和b[2],从而求出a[n]的通项公式
二阶线性递推式a[n+2] = c*a[n+1]+d*a[n]+e(c、d、e为任意常数)求法:
①设方程 x² = c*x+d 解出相应的x1, x2;
②则a[n]的通项公式就为a[n] = A*x1^(n-1)+B*x2^(n-1)
③通过已知的a[1]和a[2]求出A和B
附录:floor()函数:
功能:向下取整
例如: floor(3.14) = 3.0
floor(9.999999) = 9.0
floor(-3.14) = -4.0
floor(-9.999999) = -10
除此之外还有ceil()为向上取整
#include<stdio.h>#include<math.h>int main(void){int n, i;int a[24] = {0,1};double b, ans;for(i=2;i<=20;i++)a[i] = a[i-1]+a[i-2];while(scanf("%d", &n)!=EOF){if(n<=20){printf("%d\n", a[n]);/*当a[n]不足4位时,直接输出*/continue;}/*用特征根法求出斐波那契数列的通项公式为a[n] = 1/sqrt(5.0)*((1.0+sqrt(5.0))/2.0)^n - 1/sqrt(5.0)*((1.0-sqrt(5.0))/2.0)^n*/b = (1.0+sqrt(5.0))/2.0; /*↑↑这一部分太小啦可以忽略不计↑↑*/ans = n*log10(b)-0.5*log10(5.0);/* ans = log10(a[n]) */ans -= floor(ans);/* ans = log10(b[n]) (其中bn中的个位为an中的最高位,b[n]小数点后1位为a[n]中的次高位……)*/ans = pow(10, ans);/* ans = b[n] *//*↑↑例如a[n] = 182852345456, 则b[n] = 1.82852345456↑↑*/ans *= 1000;/*因为题目要求a[n]的前a4位,则将ans=b[n]*1000 */printf("%d\n", (int)ans);}return 0;}
阅读全文
1 0
- 特征根法--递推数列前4列
- 线性递推数列的特征方程
- 递推数列特征方程推导
- 特征方程法求解递推关系中的数列通项
- 数列的递推公式求通项(特征方程)
- 递推-------fibnacci数列
- 递推数列
- OJ_1081 递推数列
- poj2590steps数列递推
- 递推数列
- [BASIC-4] 数列特征
- 题目1081:递推数列
- 题目1081:递推数列
- 题目1081:递推数列
- HDU 1143 【递推】【数列】
- 题目1081:递推数列
- OpenJudge_P1788 Pell数列(递推)
- bzoj2656 数列 高精度&递推
- struts2中css,js等资源无效 非路径问题(新手问题)
- firewalld
- 谈谈我对php中面向对象的理解
- Python 2.x 中的 raw_input() 和 input()
- java基础知识的认识(1)
- 特征根法--递推数列前4列
- 【python入门】制作一个自定义的中文词云
- tomcat如何部署项目
- Rhel7firewalld防火墙规则
- 何为web前端开发?为何这几年如此火爆?
- POJ_3461 Oulipo 【KMP】
- 获取设备唯一标识
- 在导入阿里 坑神SDK 时的新发现。
- 搬家:https://sdlyyxy.github.io/