bi=∑j=1n(i,j)c−d∗idjdzjb_i=\sum_{j=1}^n(i,j)^{c-d}*i^dj^dz_jbi=j=1∑n(i,j)c−d∗idjdzj
biid=∑j=1nzjjd(i,j)c−d\frac{b_i}{i^d}=\sum_{j=1}^nz_jj^d(i,j)^{c-d}idbi=j=1∑nzjjd(i,j)c−d记(i,j)=x,Bi=biid,Zi=ziid,fi(d)=∑(i,j)=dZj,Fi(d)=∑d∣(i,j)Zj(i,j)=x,B_i=\frac{b_i}{i^d},Z_i=z_ii^d,f_i(d)=\sum_{(i,j)=d}Z_j,F_i(d)=\sum_{d|(i,j)}Z_j(i,j)=x,Bi=idbi,Zi=ziid,fi(d)=∑(i,j)=dZj,Fi(d)=∑d∣(i,j)Zj
biid=∑x∣inf(x)xc−d\frac{b_i}{i^d}=\sum_{x|i}^nf(x)x^{c-d}idbi=x∣i∑nf(x)xc−dbiid=∑x∣inxc−d∑kF(kx)μ(k)\frac{b_i}{i^d}=\sum_{x|i}^nx^{c-d}\sum_{k}F(kx)\mu(k)idbi=x∣i∑nxc−dk∑F(kx)μ(k)biid=∑kx∣inxc−dF(kx)μ(k)\frac{b_i}{i^d}=\sum_{kx|i}^nx^{c-d}F(kx)\mu(k)idbi=kx∣i∑nxc−dF(kx)μ(k)B(i)=∑T∣inF(T)∑x∣Tμ(T/x)xc−dB(i)=\sum_{T|i}^nF(T)\sum_{x|T}\mu(T/x)x^{c-d}B(i)=T∣i∑nF(T)x∣T∑μ(T/x)xc−d令g(T)=μ∗idc−d(T)令g(T)=\mu*id^{c-d}(T)令g(T)=μ∗idc−d(T)得到B(i)=∑T∣iF(T)g(T)B(i)=\sum_{T|i}F(T)g(T)B(i)=T∣i∑F(T)g(T)那么F(T)g(T)=∑ij=Tμ(j)B(i)F(T)g(T)=\sum_{ij=T}\mu(j)B(i)F(T)g(T)=ij=T∑μ(j)B(i)让后一路反推回去得到zzz就行了
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 100010
#define M 998244353
#define LL long long
using namespace std;
inline LL pow(LL x,LL k,int& s){
while(k<0) k+=M-1;
for(s=1;k;x=x*x%M,k>>=1) k&1?s=s*x%M:0;
}
int mu[N],c,d,n,q,inv[N];
int f[N],g[N],b[N],B[N],z[N],Z[N],F[N],xd[N],xcd[N],G[N];
int main(){
scanf("%d%d%d%d",&n,&c,&d,&q);
mu[1]=1;
for(int i=1;i<=n;++i){
pow(i,d,xd[i]);
pow(i,c-d,xcd[i]);
pow(xd[i],M-2,inv[i]);
for(int j=i+i;j<=n;j+=i) mu[j]-=mu[i];
}
for(int i=1;i<=n;++i) if(mu[i])
for(int j=1,k=i;k<=n;++j,k+=i)
g[k]=(g[k]+mu[i]*xcd[j])%M;
while(q--){
for(int i=1;i<=n;++i){
scanf("%d",b+i);
B[i]=(LL)b[i]*inv[i]%M;
}
memset(G,0,n+1<<2);
for(int i=1;i<=n;++i) if(mu[i])
for(int j=1,k=i;k<=n;++j,k+=i)
G[k]=(G[k]+mu[i]*B[j])%M;
for(int i=1;i<=n;++i)
if(!g[i]&&G[i]){
puts("-1");
goto end;
} else{
pow(g[i],M-2,F[i]);
F[i]=(LL)F[i]*G[i]%M;
}
memset(Z,0,n+1<<2);
for(int i=1;i<=n;++i) if(mu[i])
for(int j=1,k=i;k<=n;++j,k+=i)
Z[j]=(Z[j]+mu[i]*F[k]%M)%M;
for(int i=1;i<=n;++i){
z[i]=(LL)Z[i]*inv[i]%M;
printf("%d ",(z[i]+M)%M);
}
puts(""); end:;
}
}

本文详细介绍了如何利用莫比乌斯反演和扩展的灰色算法解决UOJ62问题。通过公式`bi=j=1∑n(i,j)c−d∗idjdzj`,引入`idbi`、`Zi`、`fi(d)`和`Fi(d)`等概念,逐步解析计算过程。最终,通过`g(T)=μ∗idc−d(T)`和反推方法得出解决方案。"
109577187,10283347,Python批量重命名图片脚本,"['Python编程', '文件操作', '自动化']

169

被折叠的 条评论
为什么被折叠?



