P9825 [ICPC2020 Shanghai R] Fibonacci 题解
前言。
斐波那契数列真是考吐了。
分析。
给定正数
换种说法,就是将当前斐波那契数
斐波那契的数列的定义不再赘述,这里提供一个思路。
我们给出下面的一段斐波那契数列:
1 1 2 3 5 8 13 21 34 55
其中对应的斐波那契数与其后面的数的乘积为偶的个数是:
3 3 7 2 2 4 1 1 1 0
很明显,如果让两个数相乘,则只需要其中一个数为偶数即可。因为偶数乘偶数为偶数,奇数乘偶数也为偶数。
因为斐波那契数列中的第一项与第二项均为
下文中的“组”的定义均为
在此回到上面的例子,我们分开讨论。首先看奇数,很明显为
设能分成
因为每组有两个,所以
设余下的数的个数为
代码如下,仅供参考:
#include<iostream>
using namespace std;
unsigned long long n;
int main(){
cin>>n;
//ji ji ou ji ji ou.....
unsigned long long a=n%3;
unsigned long long b=n/3;
unsigned long long ans;
ans=b*(b+1)+a*b+(b-1)*3*b/2;
cout<<ans<<"\n";
return 0;
}
后记。
大家如有疑问,可以在评论区提出,我会尽力解答的。