HDU 1568 Fibonacci 数学= = 开篇

时间:2023-03-08 17:29:28
HDU 1568 Fibonacci 数学= = 开篇

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

分析:一道数学题

找出斐波那契数列的通项公式,再利用对数的性质就可得到前几位的数

斐波那契通项公式如下:

HDU 1568 Fibonacci 数学= = 开篇

取完对数后(记fn为第n个数)

log10(fn)=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0)+log10(1-((1-√5)/(1+√5))^n)  其中f=(sqrt(5.0)+1.0)/2.0;

最后取对数的小数部分就可得最终结果

代码如下:

 #include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const double f=(sqrt(5.0)+)/2.0;
int fi[];
int main()
{
int n,i;
double bit;
fi[]=;fi[]=fi[]=;
for(i=;i<=;i++)
{
fi[i]=fi[i-]+fi[i-];
}
while(scanf("%d",&n)!=EOF)
{
if(n<=)
printf("%d\n",fi[n]);
else{
bit=-0.5*log10(5.0)+((double)n)*log(f)/log(10.0);
bit=bit-(int)bit;
bit=pow(10.0,bit);
while(bit<)bit*=;
printf("%d\n",(int)bit);
}
}
return ;
}