G - Prime Circuit Editorial by maspy


問題文から,数えるべきグラフは,1 点または素数サイクル(長さが 3 以上の素数であるようなサイクル)を橋でつないだものであることが分かります.

\(a_n\) を,ラベル付き \(n\) 頂点 からなる「1 点または素数サイクル」の個数とします.具体的には \(a_1=1\) かつ奇素数 \(p\) に対して \(a_p=(p-1)!/2\) です.

これらを橋でつなぐ際には次の数え上げが登場します:

  • \(S_1, \ldots, S_M\) を連結グラフとする.これらを \(M-1\) 個の橋で結んで連結にする方法を数え上げよ.

これは \(N^{M-2}\cdot \prod |S_i|\) です(\(N=\sum |S_i|\)).最近の出題だとたとえば https://atcoder.jp/contests/ttpc2023/tasks/ttpc2023_p の解説を見てください.

よって,\(F =\sum_n (na_n)\cdot \dfrac{x^n}{n!}\) とすると,\(M\) 個の「点または素数サイクル」からつくられる \(G\) の数え上げは \(N!\cdot N^{M-2}[x^N]\dfrac{F^M}{M!}\) となります.不慣れな方向けに解説すると

  • \(/M!\)\(M\) 個の成分にラベルをつけて数えたあと最後に \(M!\) で割る
  • 成分の大きさを \(i_1,\ldots,i_M\) とする.\(N\) 頂点のこれらのグループへの分割が \(N!/i_1!\cdots i_M!\) あって,\(F\) の係数の分母 \(n!\) と答を計算するところの \(N!\) に入っている.
  • 分割を決めたら,具体的なグラフの作り方 \(a_n\) および連結成分の大きさ \(|S_i|\) に対応する \(n\) をかけることになるのでこれが \(F\) の定義式の分子.

したがって,\(F\) を既知として \(\sum_M N^{M-2}\dfrac{F^M}{M!}\) が求まればよいです.これは \(\exp(NF)/N^2\) です.

posted:
last update: