思路
Fibonacci数列
1 1 2 3 5 8 13 21 34
可以发现Fibonacci数列是
奇奇偶 奇奇偶 奇奇偶
每三个数中有一个偶数,所以偶数的个数为k = n / 3
奇数的个数为 s = n - k
例:
1 1 2 3 5 8 13 21 34
每一个数与其后面的数相乘为偶数的个数
3 3 6 2 2 3 1 1 0
因此
奇数与后面的偶数相乘所得结果才是偶数,而且是依次减1
所以我们可以得出
前为奇数、后为偶数相乘为偶数的个数为首项为1,最后一项为k,等差为1的等差数列
即:k*(k+1)/2
因为每三个数中有两个奇数,故乘2
即:k*(k+1)
前为偶数和后面的数(奇数或偶数)相乘为偶数
第一个偶数有n − 3 个
第二个有n−3∗2个组合
第三个有n−3∗3个组合
....
直到最后一个有n−3∗k个组合
等差数列求和:(k*(2*n-3*(k+1)))/2
最终结果: 两个结果相加即可
即:k*(k+1)+(k*(2*n-3*(k+1)))/2
代码
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
long long n,k,s,s1,s2;
scanf("%lld",&n);
k=n/3;
s=n-k;
s1=k*(k+1);
s2= (k*(2*n-3*(k+1)))/2;
printf("%lld\n",s1+s2);
return 0;
}