hdu 1568 (log取对数 / Fib数通项公式)
→→→
2007年到来了。经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列
(f[0]=0,f[1]=1;f[i] = f[i-1]+fi-2)的值全部给背了下来。
接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长了。所以规定超过4位的只要说出前4位就可以了,可是CodeStar自己又记不住。于是他决定编写一个程序来测验zouyu说的是否正确。
input: 输入若干数字n(0 <= n <= 100000000),每个数字一行。读到文件尾。
output:输出f[n]的前4个数字(若不足4个数字,就全部输出)。
→→→→→→→→
简要写一下注意点,这题网上有很多大神都写过,本小白就记录一下重点吧。
→→→→→→→→→
→→→→→→→→→→→→
两边同时取对数得
→→→→→→→→→→→→
上式第三坨东西趋于0,(1 - √5)/ (1 + √5)大约是 - 0.3819,所以看到网上的代码都是前20多项就一个一个算出来(用f(n) = f(n - 1) + f(n - 2)算),20多项之后,也就是n大于20多之后,第三坨东西就真的趋近于0了,然后这个公式就化简了log 10 ( an ) = - 0.5 * log 10 ( 5.0 ) + ( ( double) n ) * log ( 省略 ) / log ( 10.0 );
还有个重要的东西,就是四位数