aia_iの最大の素因数はO(ai)O(\sqrt{a_i})で求めることができますが、制約上O(ai)O(a_i)でも可能です。

aia_iの最大の素因数を求めた後、問題文の通りにソートする方法はいくつかありますが、ここでは11つのみ紹介します。

aia_iの最大の素因数をmim_iとおきます。XXとして十分大きな値を取り、bi=mi×X+aib_i = m_i \times X + a_iを満たす配列bbをつくります。 bbを昇順にソートすることでmim_iの小さい順に、mim_iが等しい場合はaia_iの小さい順に並べることができます。 最後に、bib_iXXで割った余りに置き換えることで、求める配列を得られます。 そのため、XXはすべてのaia_iに対して真に大きい必要があります。