ブルートフォースしかない?Problem124

かつて100位以内(日本限定)であったランキングもどんどん後退。
今日現在で172位になってしまっていた。
そこで、という訳でもないのだけど以前から気になっていて解けなかった問題を再点検してみた。
Problem124をピックアップしてみた。以前は問題の意味が良くわからなかったのだけど、今日再度確認したら意味が分かった。
なので、解放の道筋は建った。
問題は素因数分解と、多重キーでのソート。後は力技でどうにかなる。
pythonはライブラリが豊富なので、期待しながらぐぐったらSymPyというものが出てきた。
どうもpurepythonっぽいので速度的にはあまり期待できないだろうけど、私がしこしこ実装するよりは速いだろう。(実行速度よりも実装にかかる時間の問題の方が問題だ。と思ったが、これに関しては過去に実装した覚えがあるので、引っ張りだしてきてもいいのだけど、巨人の肩に乗るためにPythonを使っているのだから、迷わず使用する)
このライブラリを使用すると素因数分解の結果が辞書で返って(下記参照)くるので、各アイテムのKeyを取り出して、表を作る。ただし、1は素因数分解できないので、空要素で返ってくるとか、ちと頭を抱えることもある。
>>> sympy.factorint(120)
{2: 3, 3: 1, 5: 1}

これはお分かりのように120=2**3*3*5を示している。なので、rad(n)は2*3*5=30になる。
幸いなことにPythonのリストのソートはsortedを使用すれば多重キーでソートしてくれるので、これをそのまま使用する。ただ、この問題ではrad(n)がプマイマリキーで、nがセカンダリキーなので、ちょっとここも悩みどころ。これはリストを作成する段でひっくり返すことで解決。
後はループをまわして、10000個目の要素(Pythonのリストは0オリジンなので[9999]で指定)を取り出せば完了。
なんか、エレガントな解放があるのではないかと思いながら正解者のみが読み書きできるフォーラムを覗いたけど、ブルートフォース以外なかったような??
ただ、皆さん速いな。Pythonで900msとか。
私はもっとかかったな。まぁ、経過を見るためにprint文多用とかあるんだろうけど。

そうそう、今回はLionでのPython(IDLE)初使用なのだけど、結構いい感じ。
問題は日本語がきちんと入らないことだな。(FEPより先にIDLEがキー入力を奪ってしまっている感じ)
しょうがないので、コメントは別にエディターで書き込むか。
いまいちだな。
ps
これで103問解いたけど、ランキング的にはほとんど変動なしだなぁ。もっと解かないと。
サイコロ問題は解法の道筋は出たので、後は実装するだけ(のはず)なんだけど。