狄利克雷卷积性质,和HDU-5628 Clarke and math这题一样。
复杂度.
#include<bits/stdc++.h> using namespace std; const int mod=998244353; typedef long long ll; const int N=1e5+5; ll f[N],g[N],t[N]; int n,k; ll ksm(ll a,ll b){ ll ans=1; for(;b>0;b>>=1,a=a*a%mod)if(b&1)ans=ans*a%mod; return ans; } void cal(ll *a,ll *b){ memset(t,0,sizeof t); for(int i=1;i<=n;i++){ for(int j=i;j<=n;j+=i){ t[j]+=a[i]*b[j/i]; if(t[j]>=mod)t[j]%=mod; } } for(int i=1;i<=n;i++)a[i]=t[i]; } int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;i++)scanf("%d",&g[i]); f[1]=1; k=ksm(k,mod-2); while(k){ if(k&1)cal(f,g); cal(g,g); k>>=1; } for(int i=1;i<=n;i++)printf("%d%c",f[i]," \n"[i==n]); }