Fibonacci(第45届ICPC区域赛上海站)

在这里插入图片描述
在这里插入图片描述

思路

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值