这是编程挑战-高校俱乐部的题目。求(3 + √5)^n的小数点前(整数部分)的最低3位。 例如:(3 + √5)^5 = 3935.73982…则输出935 而(3 + √5)^2 = 27.4164079.. 则输出027。 输入格式: 多组数据,每组一行包含一个正整数n, 2<=n<=2000000000。 输出格式: 每组数据输出一行,恰好包含3个数字。
看到这个题,感觉就是完全不是考验编程能力,而是更多考验数学能力。很明显,要是一个没有学过高等数学的人,基本不太可能解决这个问题(当然了,学了也解决不了的人也存在)。看这个题,输入变量n的变化范围很大,显然,这个题是有简便的解法的。
笨办法是把这个数求出来,不过显然有难度。先不说这个复杂度,就是n大到一定程度的时候,计算机就不好表示这个数了,而且由于误差的存在,结果很有可能是错的。所以要换个思路。
我看到这个题,想到的是菲波那契数列。为什么呢?因为如果a0=a1=1,那么n>1,an=((1+√5)/2)^n+(1-√5)/2)^n。an其实是个整数,但是却可以用两个无理数来表示。那这里是不是也有用呢。刚好,3 -√5是个小于1的