HDU 1568 Fibonacci
2012-08-28 16:58
351 查看
数学题,像我这种不擅数学者的悲哀
此题需要用到Fibonacci数列的通项公式:
也要利用对数的性质:
loga(b^c)=c*loga(b);
loga(b*c)=loga(b)+loga(c);
假设给出一个数1234567,那么log10(1234567)=log10(1.234567*10^6)=log10(1.234567)+6;
log10(1.234567)就是log10(1234567)的小数部分:
10^log10(1.234567)=1.234567
。
对Fibonacci数列取对数:
其中
log10(1-( (1-√5)/(1+√5)
)^n) 可以忽略。
那么题目的解决很容易就出来了
此题需要用到Fibonacci数列的通项公式:
也要利用对数的性质:
loga(b^c)=c*loga(b);
loga(b*c)=loga(b)+loga(c);
假设给出一个数1234567,那么log10(1234567)=log10(1.234567*10^6)=log10(1.234567)+6;
log10(1.234567)就是log10(1234567)的小数部分:
10^log10(1.234567)=1.234567
。
对Fibonacci数列取对数:
其中
log10(1-( (1-√5)/(1+√5)
)^n) 可以忽略。
那么题目的解决很容易就出来了
#include<iostream> #include<cstdio> #include<cmath> using namespace std; const double m=(sqrt(5.0)+1.0)/2.0; const double t=-0.5*log10(5.0); int main() { int n,c; int f[21]; f[0]=0;f[1]=1; for(int i=2;i<=20;i++) f[i]=f[i-1]+f[i-2]; while(scanf("%d",&n)!=EOF) { if(n<=20) cout<<f <<endl; else { double temp= (t+n*log10(m)); c=(int) temp; temp-=c; temp=pow(10.0,temp); while(temp<1000) temp*=10; printf("%d\n",(int)temp); } } return 0; }
相关文章推荐
- hdu 1568 Fibonacci
- hdu 1568 Fibonacci
- hdu 1568 Fibonacci
- hdu 1568 Fibonacci
- 【HDU 1568 Fibonacci】+ 数学
- HDU 1568 Fibonacci【数学】
- HDU 1568 Fibonacci ★(取科学计数法)
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci
- hdu 1568 Fibonacci 斐波那契通项公式求对数
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci ★(取科学计数法)
- HDU 1568 Fibonacci
- 数论(fabonacci数列) hdu-1568-Fibonacci
- HDU 1568 Fibonacci(简单数论)
- hdu1568 Fibonacci
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci(数学 递推式)
- HDU 1568 Fibonacci