题意:
找到K个数字不能构成的fibonacci数字的最小值。
思路:
对于2个数字来说,他所不能构成的最小值,必定是从第 s 个 到第s -1个的fibonacci数字差值大于 一个数字能组成的fibonacci数字。
找个规律发现是 4+n*2-1个数字-1
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
struct matrix{
long long arr[3][3];
};
long long mod=998244353;
matrix base,ans;
matrix matrix_mulip(matrix a,matrix b)
{
matrix tep;
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
tep.arr[i][j]=0;
for(int k=1;k<=2;k++)
{
tep.arr[i][j]=(tep.arr[i][j]+a.arr[i][k]*b.arr[k][j])%998244353;
}
}
}
return tep;
}
void matrix_pow(matrix a,long long n)
{
while(n)
{
if(n%2)
{
ans=matrix_mulip(ans,a);
}
a=matrix_mulip(a,a);
n=n/2;
}
}
int main()
{
base.arr[1][1]=base.arr[1][2]=base.arr[2][1]=1;
base.arr[2][2]=0;
long long n;
while(~scanf("%lld",&n) )
{
ans.arr[1][1]=ans.arr[2][2]=1;
ans.arr[1][2]=ans.arr[2][1]=0;
matrix_pow(base,(4+n*2-1));
printf("%lld\n",ans.arr[1][2]%998244353-1);
}
return 0;
}