lam_dyr
2025-01-08 14:30:08
题解区大佬们的拉格朗日插值看的本蒟蒻一脸恐慌,那就写一篇亲民的题解吧。
题面较长,核心是要用一个
直接求该多项式的值是困难的,我们不妨先判一下下无解的情况。
以上不懂的请自行查阅有关逆元的知识。
判完无解之后如何考虑呢?我们可以分类讨论。考虑能覆盖所有情况的分类——奇偶性讨论。
在讨论之前,我们不妨先通过构造转化一下。
令
我们构造
所以:
经过以上推导,我们就可以开始愉快的分类讨论了。
当
由于
同时,根据
带入
所以,当
同理,当
又因为
带入
所以,当
注意此时要先计算
以下是短的吓人的代码。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=998244353;
ll ksm(ll a,ll b,ll mod){
ll res=1;
a%=mod;
while(b>0){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin>>T;
while(T--){
ll n;
cin>>n;
//判断n+1是否大于等于模数
if(n>=MOD){
cout<<"-1\n";
continue;
}
//如果n是偶数,输出0
if(n%2==0){
cout<<"0\n";
continue;
}
//如果n是奇数,计算2/(n+1) mod 998244353
//先计算逆元
ll inv=ksm(n+1,MOD-2,MOD);
ll ans=(2*inv)%MOD;
cout<<ans<<"\n";
}
}