斐波那契前 n 项平方和是多少? 为了防止答案过大,请将最后的答案模 1e9+7
输入描述:
第一行一个整数 n(1<=n<=1e18)
输出描述:
在一行中输出斐波那契数列的前 n 项平方和模 1e9+7
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll p = 1e9 + 7;
map<ll, ll>a;
ll n;
ll f(ll n)
{
if (a[n] != 0)
return a[n];
ll t = n;
n /= 2;
if (t % 2)
return a[t] = f(n) * f(n) % p + f(n + 1) * f(n + 1) % p;
else
return a[t] = (2 * f(n - 1) % p + f(n) % p) * f(n) % p;
}
int main()
{
cin >> n;
a[1] = a[2] = 1;
cout << f(n) % p * f(n + 1) % p << endl;
return 0;
}