を素数とします。そうすると、 に対して が成り立ちます。
もっと一般に、正整数 に対して の素因数分解をそれぞれ 、ただし は素数、 とすると、多重集合 と が一致していれば が言えます。
つまり、素因数の指数の多重集合によって、 の値が決定されるということです。以降は に対して、多重集合 を の Prime Signature ( https://en.wikipedia.org/wiki/Prime_signature )と呼ぶことにします。
以下の Prime Signature は何種類あるでしょうか? の場合、素因数の個数は 以下であるため、 以下の分割数の和で個数が評価できます。A000070 によると、 個程度です。しかし、実際はより少なく、次のようになります。
下の表の2べき版については https://oeis.org/A025488 にあります。
| 個数 | |
|---|---|
| 5 | |
| 16 | |
| 39 | |
| 83 | |
| 160 | |
| 289 | |
| 492 | |
| 803 | |
| 1274 | |
| 1962 | |
| 2958 | |
| 4357 | |
| 6312 | |
| 8999 | |
| 12651 | |
| 17563 | |
| 24112 | |
| 32749 |
Prime Signature を列挙し、それぞれについて を求めることが比較的短時間で出来ます。
各 Prime Signature についてその の値が分かったとします。
この問題に答えるために、各 Prime Signature について 以下でその Prime Signature になるようなものの個数をすべて求めたいです。
まず、いわゆる Lucy DP によって各 に対して 以下の素数の個数を から 時間で求めます。
そこから、 Black Algorithm を応用した DFS を適用します。次の 頂点の木を考えます。
これを DFS しますが、葉であるような頂点は探索しないことにします。探索回数は次の表の通りになります。
| 探索回数 | ||
|---|---|---|
| 10^1 | 4 | 0.60206 |
| 10^2 | 19 | 0.63938 |
| 10^3 | 88 | 0.64816 |
| 10^4 | 403 | 0.65133 |
| 10^5 | 1894 | 0.65548 |
| 10^6 | 9108 | 0.65990 |
| 10^7 | 44948 | 0.66467 |
| 10^8 | 228102 | 0.66977 |
| 10^9 | 1185818 | 0.67489 |
| 10^10 | 6298637 | 0.67992 |
| 10^11 | 34113193 | 0.68481 |
| 10^12 | 188014195 | 0.68952 |
| 10^13 | 1052806860 | 0.69403 |
| 10^14 | 5981038282 | 0.69834 |
| 10^15 | 34430179518 | 0.70246 |
| 10^16 | 200620098564 | 0.70640 |
| 10^17 | 1182177744973 | 0.71016 |
| 10^18 | 7039070737124 | 0.71375 |
よって、競プロで使う範囲の に対しては や と同じくらいと見積もることができます。ただし、実際は らしいです。(ABC370-G の解説)
ここで、葉でない頂点 について、そこからつながる 以外の葉はすべて Prime Signature が同じになっています。よって、各 以下の素数の個数を数え上げたことによって、 各 Prime Signature となる 以下の正整数の個数を探索回数の定数倍で求めることができます。
以上を実装することでこの問題に答えることができます。