Problem 49 (Project Euler) [原文]
項差3330の等差数列1487, 4817, 8147は次の2つの変わった性質を持つ。
- 3つの項はそれぞれ素数である。
- 各桁は他の項の置換で表される。
1, 2, 3桁の素数にはこのような性質を持った数列は存在しないが、4桁の増加列にはもう1つ存在する。
それではこの数列の3つの項を連結した12桁の数を求めよ。
「公差:3300で探せ」とはどこにも書かれていないにも関わらず、Project Eulerの掲示板では公差が3300であることを前提に正解に至っていると思しき人がいらっしゃって、ちょっと可笑しかったです。
以下のような手順で解くことにしました。
この順番でなんの工夫もなしに書いたプログラムを走らせると、20秒程度で正解にたどり着きました。考え方としては間違ってはいないし、そこそこできたものと思っていました。
ところが掲示板にはRubyで書かれたとても速い解答が書きこまれていました。小さなクラスを適切に作成し、素数リストを作成する段階で後の処理を簡単にするような工夫が施されていました。正解が表示されるまでの時間は、私の書いたコードと比べると実に100分の1であり、スキルが100倍劣るということですから、普通に凹みました。
この辺りのレベルの問題だと、スキルの差が大きく表れるようです。先のProblem 47で記載したコードなどは論外でお恥ずかしい限りで、消したい衝動に駆られたのでございます。