xについての形式的冪級数fのxiの係数を[xi]fと表すと、サイコロをk回振った時、出た目の合計がiになる確率は[xi](n1x+n1x2+⋯+n1xn)kとなります。よって、g(x)=(n1x+n1x2+⋯+n1xn)kとおくと、求める確率は2mの倍数であるようなiについて[xi]gを合計した値となります。ここで、[xi]g=ciとすると、g(x)=i∑cixiとなります。また、求める確率p=2m∣i∑ciとなります。
ここで、1の2m乗根をξとすると、iが2mの倍数の時j=0∑2m−1ξij=j=0∑2m−11j=2mとなり、そうではない時はξi=1なので、 j=0∑2m−1ξij=1−ξi1−(ξi)2m=1−ξi1−(ξ2m)i=1−ξi1−1i=0となります。よって、j=0∑2m−1g(ξj)=i∑cij=0∑2m−1ξij=2m2m∣i∑ci=2mpとなるので、p=2m1j=0∑2m−1g(ξj)となります。
次に、適切なξを求めます。3は998244353(=119×223+1)の原始根の1つなので、2119×223−mは1の2m乗根の1つです。よって、2119×223−mを998244353で割った余りをξとすれば良いです。
最後に、g(ξj)の求め方について述べます。x+x2+⋯+xnをそのまま計算すると、0≤j<2mにおける計算量がO(2mn)となってしまい、制限時間に間に合いません。そこで、x=1すなわちj=0の場合はg(x)=1とし、それ以外の場合はg(x)=(n1x⋅x−1xn−1)k=nk(x−1)kxk(xn−1)kとして、これにx=ξjを代入します。
これにより、mod 998244353における除算は定数時間で行えるものとすると、pはO(2mlogk)で計算できるため、十分時間内に間に合います。
解答例
modint型を利用するため、AC Libraryの一部を引用しました。引用した部分に関しては、解答例にその旨を明記してあります。
質問・誤りがある場合
Twitterに連絡ください。ID : @YS55749378