提交时间:2025-10-21 19:43:35

运行 ID: 38735

#include<bits/stdc++.h> #define ll long long using namespace std; const int mod=998244353; void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} int qp(int a,ll b){ int x=1; while(b){ if(b&1) x=1ll*x*a%mod; a=1ll*a*a%mod;b>>=1; }return x; } ll n,k,p; int calcans(int val){ int pw=qp(mod+1-p,k);n%=mod; //cout<<"tmp:"<<1ll*(1ll*(1ll*val*p)%mod*qp(mod+1-pw,mod-2))%mod*qp(n,mod-2)%mod<<endl; return 1ll*(1ll*(1ll*val*p+1ll*n*n%mod*pw)%mod*qp(mod+1-pw,mod-2))%mod*qp(n,mod-2)%mod; } namespace sub1{ const int N=2e5+10; int pwl[N]; void main(){ pwl[0]=1; for(int i=1;i<=n;i++) pwl[i]=1ll*pwl[i-1]*(mod+1-p)%mod; int iv=qp(p,mod-2); int tval=0; for(int i=1;i<=n;i++){ ll v=1ll*k*i-1; int v1=1ll*n*(mod+1-pwl[v/n])%mod*iv%mod; int v2=1ll*(v-(v/n)*n+1)%mod*pwl[v/n]%mod; tval=(tval+(v1+v2)%mod)%mod; }tval=mod-tval;tval=(tval+1ll*n*(n+1)%mod*(mod+1-pwl[k])%mod*iv)%mod; //cout<<1ll*n*(n+1)%mod*(mod+1-pwl[k])%mod*iv%mod<<endl; int now=0,t=1,val=0,pw=1; for(int i=1;i<=n;i++){ int stp=n-now,v=k; if(v>stp){ Add(val,1ll*stp*i%mod*pw%mod); v-=stp;t++;pw=1ll*pw*(mod+1-p)%mod; now=v;Add(val,1ll*now*i%mod*pw%mod); }else{ Add(val,1ll*v*i%mod*pw%mod);now+=v; }//cout<<i<<' '<<val<<' '<<now<<endl; }pw=1ll*pw*(mod+1-p)%mod; //cout<<val<<' '<<tval<<endl; //cout<<"val:"<<3ll*val%mod<<endl; cout<<calcans(val)<<endl; } } namespace sub2{ void main(){ int val=1ll*(n/k+1)%mod*(n%mod)%mod*qp(2,mod-2)%mod; //cout<<"val:"<<val<<endl; n%=mod;k%=mod; //cout<<(1ll*val*qp(n,mod-2))%mod<<endl; int ans=(1ll*val*qp(n,mod-2)+1ll*(mod+1-p)*n%mod*qp(1ll*k%mod*p%mod,mod-2))%mod; cout<<ans<<endl; } } namespace sub3{ void main(){ ll T=n/k+1; int ans=1ll*((n%k)+1ll*(n/k*k)%mod*qp(2,mod-2))%mod*(T%mod)%mod*qp(n%mod,mod-2)%mod; cout<<ans<<endl; } } int Tc=0; void slv(){ cin>>n>>k>>p; if(n<=2.1e5&&Tc<=15) sub1::main(); else if(n%k==0) sub2::main(); else if(p==1) sub3::main(); else sub1::main(); } int main(){ //freopen("sun.in","r",stdin); //freopen("sun.out","w",stdout); int t;cin>>t;Tc=t; while(t--) slv(); return 0; }