原题来自Loj的6291
题目要求就是求斐波那契数列的前n项平方和对mod 取模的值
刚开始 以为要求fib循环节,后来发现计算是有规律的
根据题目要求可发现题目所求值实际上是fib【n】*fib【n-1】的值%mod
下面是用快速求取模后fib值的ac代码(核心思路就是矩阵求fib)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
pair<ll,ll> operator *(const pair<ll,ll> &a,const pair<ll,ll> &b)
{
return make_pair((a.first*b.first+a.second*b.second)%mod,
(a.first*b.second+a.second*b.first+a.second*b.second)%mod);
}
ll F(ll y)
{
pair<ll,ll> ans=make_pair(1,0),x=make_pair(0,1);
while(y)
{
if(y&1) ans=ans*x;
x=x*x;
y/=2;
}
return ans.first+ans.second;
}
int main()
{
ll n;
cin>>n;
cout<<F(n-1)*F(n)%mod;
return 0;
}