数学题使劲推就对了。
让我们设 g(x) = ∑ C(i,x) * b^i ,然后后面验算了一张纸QWQ,懒得再打一遍了,回家我就把这张演算纸补上QWQ,先上代码。
#include<cstdio> #define ll long long using namespace std; const int maxn=500005,ha=998244353; inline int add(int x,int y){ x+=y; return x>=ha?x-ha:x;} inline void ADD(int &x,int y){ x+=y; if(x>=ha) x-=ha;} inline int ksm(int x,int y){ int an=1; for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha; return an; } int b,k,ans,inv[maxn],mul,ni; ll n; int main(){ freopen("diyiti.in","r",stdin); freopen("diyiti.out","w",stdout); scanf("%lld%d%d",&n,&b,&k),n++; inv[1]=1; for(int i=2;i<=k;i++) inv[i]=ha-inv[ha%i]*(ll)(ha/i)%ha; mul=ksm(b,n%(ha-1)),ni=ksm(b-1,ha-2); ans=add(add(mul,ha-1)*(ll)ni%ha,ha-1); n%=ha; for(int i=1,now=mul;i<=k;i++){ now=now*n%ha*(ll)inv[i]%ha,n=add(n,ha-1); ans=add(now,add(ha-b*(ll)ans%ha,ha-(i==1?b:0))); ans=ans*(ll)ni%ha; } printf("%d ",ans); return 0; }