100000002 - even Fibonacci numbers

时间限制

10 毫秒

内存限制

128 MB

通过次数

3

提交次数

6

斐波那契数列从第三项开始都是前两项和,若第一项与第二项为1、2,考虑该斐波那契数列中不超过n的项,求这些项中值为偶数项的和。

输入

一行,一个整数。

测试点一:n=4×10^6

测试点二:n=10^{16}

输出

样例

输入

8

输出

10

提示

a、其中2、5、8、11、14项为偶数(两基数相加得来),将f(n)=f(n-1)+f(n-2)变形:

=f(n-2)+f(n-3)+f(n-3)+f(n-4)

=2f(n-3)+f(n-2)+f(n-4)

=2f(n-3)+f(n-3)+f(n-4)+f(n-5)+f(n-6)

=3f(n-3)+f(n-4)+f(n-5)+f(n-6)

=3f(n-3)+f(n-3)-f(n-5)+f(n-5)+f(n-6)

=4f(n-3)+f(n-6)

得到偶数项递推公式:f(n)=4×f(n-3)+f(n-6)

换言之,有一个数列,其第一项为2,第二项为8,递推公式为f(n)=4×f(n-1)+f(n-2)。

b、使用斐波那契数列通项公式,依次求出并筛选符合题意的斐波那契数。但遗憾的是,斐波那契数列的通项公式比其递推公式难于用程序高效实现,它长这个样子: 小数的累加导致误差不断累积,用高精实现效率又较低。