求助简单题
  • 板块学术版
  • 楼主xqqQwQ_
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/8/28 10:10
  • 上次更新2023/10/27 13:22:04
查看原帖
求助简单题
480934
xqqQwQ_楼主2022/8/28 10:10

题面

这个题好像是可以矩阵快速幂的。但是同学写了个究极玄学的做法,不知道为什么是对的。

#include <bits/stdc++.h>
using namespace std;
const long long Mod=998244353,ny=598946612;
int n;
long long s,t,ans;
long long pow(int p)
{
	if(p==0) return 1;
	if(p==1) return 2;
	long long ret=pow(p>>1);
	if(p&1==1) return ret*ret%Mod*2;
	return ret*ret%Mod;
}
int main()
{
	cin>>n;
	s=pow(n/5);
	t=pow(n);
	if(n%5==0) ans=4*s+t;
	else if(n%5==1) ans=3*s+t;
	else if(n%5==2) ans=s+t;
	else if(n%5==3) ans=2*s+t;
	else ans=4*s+t;
	ans=ans*ny%Mod;
	cout<<ans;
	return 0;
}

(pow为2^n, ny是5在模998244353下的逆元)

有没有大佬解释一下他是怎么写的

2022/8/28 10:10
加载中...