PE2 Even Fibonacci Numbers

Project Euler 链接

题意

定义一个数列 \(\{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;
}
posted @ 2025-04-06 20:26  LXcjh4998  阅读(13)  评论(0)    收藏  举报