PE2 Even Fibonacci Numbers
题意
定义一个数列 \(\{F_n\}\):
\[F_n=\begin{cases}
1,&n=1\\
2,&n=2\\
F_{n-1}+F_{n-2},&n\ge3
\end{cases}\]
求 \(\displaystyle\sum_{i=1}^{\infty}F_i[F_i<4\times10^6\land2\mid F_i]\)
思路
思路 1
直接枚举每个 \(F_i\) 并计算。
#include<iostream>
using namespace std;
const int limit=4e6;
int a=1,b=1,tmp;
int sum;
int main(){
while(true){
tmp=b;
b=a+b,a=tmp;
if(b>=limit)break;
if(b%2==0)sum+=b;
}
cout<<sum;
return 0;
}
思路 2
观察到只有 \(F_2\),\(F_5\),\(F_8\) 等数为偶数,可以猜想形如 \(F_{3n+2}\) 的数都是偶数。
证明:
- \(n=0\):显然成立。
- \(n=k-1\) 成立时,有
\[\begin{aligned} F_{3k+2} &=F_{3k+1}+F_{3k}\\ &=2F_{3k}+F_{3k-1}\\ &=3F_{3k-1}+2F_{3k-2} \end{aligned}\]因此 \(2\mid F_{3k+2}\),证毕。
令 \(f_n=F_{3n+2}\),则有:
\[f_n=\begin{cases}
2,&n=1\\
8,&n=2\\
4f_{n-1}+f_{n-2},&n\ge3
\end{cases}\]
证明:
令 \(f_n=F_{3n+2}=a,F_{3n+3}=b\),不难得到 \(f_{n+1}=a+2b,f_{n+2}=5a+8b\)。
由瞪眼法观察法可知,\(f_{n+2}=f_n+4f_{n+1}\)。
按照递推公式计算即可。
#include<iostream>
using namespace std;
const int limit=4e6;
int a=2,b=8,tmp;
int sum=2+8;
int main(){
while(true){
tmp=b;
b=a+4*b,a=tmp;
if(b>=limit)break;
sum+=b;
}
cout<<sum;
return 0;
}

浙公网安备 33010602011771号