本题是为了求解n不能good的最小值,根据矩阵快速幂,求出Fn;通过规律求解Fn中的n为k*2+3;
求得值为Fn-1;
#include <iostream>
#include <cstdlib>
#include <cstdio>
#define mod 998244353
using namespace std;
typedef long long ll;
struct M
{
ll num[3][3];
};
M ans,rns;
M work(M A,M B)
{
M C;
for(int i=1; i<=2; i++)
for(int j=1; j<=2; j++)
C.num[i][j]=0;
for(int i=1; i<=2; i++)
for(int k=1; k<=2; k++)
for(int j=1; j<=2; j++)
{
C.num[i][j]+=A.num[i][k]*B.num[k][j];
C.num[i][j]=C.num[i][j]%mod;
}
return C;
}
void work1(ll n)
{
for(int i=1; i<=2; i++)
for(int j=1; j<=2; j++)
if(i==j)
ans.num[i][j]=1;
else
ans.num[i][j]=0;
while(n>0)
{
if(n&1)
ans=work(ans,rns);
rns=work(rns,rns);
n>>=1;
}
}
int main()
{
ll k;
while(~scanf("%lld",&k))
{
ll n=2*k+3;
rns.num[1][1]=1;
rns.num[1][2]=1;
rns.num[2][1]=1;
rns.num[2][2]=0;
work1(n-1);
ll t=ans.num[1][1]%mod;
printf("%lld\n",t-1);
}
return 0;
}