码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1568 Fibonacci

时间:2015-06-03 15:24:04      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568

参考别人的思路过的==|||,当n比较大的时候,使用如图所示的通项公式:

技术分享

先化简,使用极限考虑,n很大的情况消去一个项:[1-(1-?5)^n/(1+?5)^n],然后方程两边取对数。

得到log10(fn) = n*log10((1+?5)/2)-1/2*log10(5)

ac代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int a[100];
void init(){
	a[0]=0;
	a[1]=1;
    for(int i=2;i<21;i++){
    	a[i]=a[i-1]+a[i-2];
    }
}

int main(){
	init();
	int n;
	while(scanf("%d",&n)==1){
		if(n<21){
			printf("%d\n",a[n]);
			continue;
		}
		double log10f = n*log((1+sqrt(5))/2)/log(10)-0.5*log(5)/log(10);
		double res = pow(10,log10f-floor(log10f));
		while(res<1000){
			res*=10;
		}
		printf("%d\n",(int)res);
	}
}

 

hdu 1568 Fibonacci

标签:

原文地址:http://www.cnblogs.com/jackwuyongxing/p/4549092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!