P5553
电学实验
这是一道数学题。
我们可以知道这个条件:
对于
那么现在我们要求的就是
我们令
那么我们可以把
令
那么这个式子的常数项为
而
那么我们就可以得到
那么我们就可以得到
令
然后我们又知道
所以
快速幂算乘法逆元即可。
然后注意这个题的逆元不仅要求答案中的逆元有意义,还要求之前数据中的答案的逆元都有意义,所以说只要判断
所有说我们并不需要判定互质还是不互质,直接与模数比较大小即可。
然而这个题还比较的神奇,就是说如果
所以说我们直接按照
时间复杂度
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const ll mo=998244353;
ll T,n,b,p,ans;
inline ll read() {
ll ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') f=-f;ch=getchar();}
while(ch>='0'&&ch<='9') {ret=(ret<<3)+(ret<<1)+ch-'0';ch=getchar();}
return ret*f;
}
void write(ll x) {
static char buf[22];static ll len=-1;
if(x>=0) {
do{buf[++len]=x%10+48;x/=10;}while(x);
}
else {
putchar('-');
do{buf[++len]=-(x%10)+48;x/=10;}while(x);
}
while(len>=0) putchar(buf[len--]);
}
int main() {
T=read();
while(T--) {
n=read();
if(n>=mo) {
write(-1);putchar('\n');
}
else
if(n%2==0) {
write(0);putchar('\n');
}
else {
ans=2;p=mo-2;b=n+1;
while(p>0) {
if(p&1) ans=(ans*b)%mo;
b=(b*b)%mo;p>>=1;
}
write(ans%mo);putchar('\n');
}
}
return 0;
}