この問題は再帰関数と約数列挙を問います。
このような「条件を満たす組み合わせ」を求めるとき、かつ制約が小さい場合は再帰関数による列挙を行うことで解決できます。
今回の問題もそのような構造になっています。
問題文中にある という条件から、これはすべての に対して が で割り切れることと同値です。
逆にそうでなければ は の総積として表すことはできません。
これより の探索候補は の約数であることがわかります。
したがって約数列挙を用い、その候補の中から総積が となるような組み合わせを再帰関数によって求めればよいです。
しかし単純に「 から にするまで約数を乗じていく」という手法を取ると、あるケースによっては総積が を超えてしまうことがあります。
さらにそれは bit整数型に収まらない可能性もあります。
そのため、単純に乗じていくのではなく、「 から にするまで約数で割っていく」操作をすることが適切です。
この問題の最悪計算回数ですが、今回の制約から のケースが最大となります※。
このケースでの計算回数は約 回となりますが、十分高速です。よってこの問題を解くことができます。
解答例(C++):
※
この数字は高度合成数と呼ばれ、 以下の整数において約数の個数が最大となる数字です。厳密には に対しては 個の約数が存在します。