社区讨论
萌新刚学 OI 求助基础数学题
P4238【模板】多项式乘法逆参与者 7已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @mkafyp15
- 此快照首次捕获于
- 2026/01/12 08:45 上个月
- 此快照最后确认于
- 2026/01/16 14:00 上个月
如题,感觉写的没问题啊,样例过不去
CPP#include<bits/stdc++.h>
using namespace std;
namespace MyUsing{
#ifndef ONLINE_JUDGE
#define File(data) filein(data),fileout(data)
#else
#define File(data)
#endif
#define i128 __int128
#define int long long
#define for_(i,a,b) for(int i=a;i<=b;i++)
#define _for(i,a,b) for(int i=a;i>=b;i--)
#define endl '\n'
#define mid(l,r) ((l+r)>>1)
#define filein(data) freopen(data".in","r",stdin)
#define fileout(data) freopen(data".out","w",stdout)
inline void read(int &x){
x=0;int f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
x=x*f;
}
template<typename T,typename ...Tp>
inline void read(T &x,Tp &...y) {read(x),read(y...);}
} using namespace MyUsing;
namespace Poly{
#define swap(a,b) a^=b, b^=a, a^=b
const int N = 3e6+5, p=998244353, G=3, Gi=332748118;
int n, m, limit = 1, L, r[N], tmp[N], G2[N];
inline int qpow(int x,int y){
int ans=1;
while(y){ if(y&1) ans=ans*x%p; y>>=1; x=x*x%p;}
return ans;
}
inline void NTT(int *A, int type) {
for_(i,0,limit-1) if(i < r[i]) swap(A[i], A[r[i]]);
for(int mid=1; mid<limit; mid<<=1) {
int Wn = qpow( type == 1 ? G : Gi , (p - 1) / (mid << 1));
for(int j=0; j<limit ;j+=(mid<<1)) {
int w = 1;
for(int k = 0; k < mid; k++, w = (w * Wn) % p) {
int x = A[j + k], y = w * A[j + k + mid] % p;
A[j + k] = (x + y) % p,
A[j + k + mid] = (x - y + p) % p;
}
}
}
}
inline void poly_Mult(int *A,int *B,int n,int m,int *G){
while(limit <= n + m) limit <<= 1, L++;
for_(i,0,limit-1) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (L - 1));
NTT(A, 1);NTT(B, 1);
for_(i,0,limit-1) A[i] = (A[i] * B[i]) % p;
NTT(A, -1); int inv = qpow(limit,p-2);
for_(i,0,n+m) G[i]=A[i]*inv%p;
}
inline void poly_inv(int *A,int n,int *G){
G[0]=qpow(A[0],p-2);
for(int i=1;i<2*n;i<<=1){
for_(j,0,i/2) G2[i]=2*G[i]%p;
limit=1,L=0; while(limit<=3*i) limit<<=1, L++;
for_(j,0,limit-1) r[j]=(r[j>>1]>>1)|((j&1)<<L-1);
for_(j,i/2+1,limit-1) G[j]=0;
for_(j,0,i) tmp[j]=A[j]; for_(j,i+1,limit-1) tmp[j]=0;
NTT(tmp,1), NTT(G,1);
for_(j,0,limit-1) G[j]=1ll*tmp[j]*G[j]%p*G[j]%p;
NTT(G,-1); int inv = qpow(limit,p-2); for_(j,0,limit-1) G[j]=G[j]*inv%p;
for_(j,0,limit-1) G[j]=(G2[j]-G[j]+p)%p;
}
}
}
using namespace Poly;
int a[N],b[N],g[N],n,m;
signed main() {
// File("data");
int n;read(n);n--;
for_(i,0,n) read(a[i]),(a[i]+=p)%=p;
poly_inv(a,n,g); for_(i,0,n) cout << g[i] << " ";
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...