列表

详情


NC200184. 斐波那契

描述

 特别喜欢斐波那契数列,已知 ,对于 ,并且他想知道斐波那契前  项平方和是多少?

为了防止答案过大,请将最后的答案模 

输入描述

第一行一个整数

输出描述

在一行中输出斐波那契数列的前  项平方和模 

示例1

输入:

5

输出:

40

说明:

1^2+1^2+2^2+3^2+5^2=40

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 2ms, 内存消耗: 420K, 提交时间: 2023-03-10 18:48:16

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,mod=1e9+7;
map<ll,ll>m;
ll f(ll x)
{
    if (m[x]!=0)return m[x];
    ll y=x/2;
    m[x]=((f(y)*f(x-y+1))%mod+(f(y-1)*f(x-y))%mod)%mod;
    return m[x];
}
int main()
{
    cin>>n;
    m[1]=1;
    m[2]=1;
    m[3]=2;
    cout<<(f(n)*f(n+1))%mod;
    return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 624K, 提交时间: 2020-02-25 13:38:02

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,mod=1e9+7;
map<ll,ll>m;
ll f(ll x)
{
	if(m[x]!=0) return m[x];
	ll y=x/2;
	m[x]=((f(y)*f(x-y+1))%mod+(f(y-1)*f(x-y))%mod)%mod;
	return m[x];
}
int main()
{
	cin>>n;
	m[1]=1;
	m[2]=1;
	m[3]=2;
	cout<<(f(n)*f(n+1))%mod;
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 504K, 提交时间: 2020-08-13 18:10:49

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,mod=1e9+7;
map<ll,ll>m;
ll f(ll x){
	if(m[x]!=0) return m[x];
	ll y=x/2;
	m[x]=((f(y)*f(x-y+1))%mod+(f(y-1)*f(x-y))%mod)%mod;
	return m[x];
}
int main(){
	cin>>n;
	m[1]=1;
	m[2]=1;
	m[3]=2;
	cout<<(f(n)*f(n+1))%mod;
return 0;
}

上一题