のてすきあ − 完全独習非プログラマー −

Haskell で Project Euler を解く素人遊び

Problem 47

4つ連続した数で、それぞれが相異なる4つの素因数を持つものを見つける。

 虱潰しに当たれば、所望の数は見つかる。ただし時間がかかる。少しでも早くしたいと思ってごちゃごちゃといじくり回しているうちに、見るもおぞましいコードになってしまった。努力は全く報われず、これで我が家のデスクトップで45秒。何も工夫をしない虱潰しで2分半くらいだったので、そこまで劇的な改善というわけでもない。

 どうすれば早くなるだろうか?まず、因数分解は避けられない。数を小さい方から走査的に評価する作業も省けない。素数は評価の対象から外せるが、素数を除く操作もまたそれなりに重たいので、計算時間の短縮に寄与するとは思えない。評価する数の下限を適当に(例えば2×3×5×7のように)置くことは可能だが、焼け石に水である。

 実は因数分解を真面目にやらず、新しい素因数が登場した場合だけカウントすることができるのではないかと思っているが、労力に見合う成果が得られないのでは、と思うと気が進まない。  

 今回はそんなわけで、あまり人様にお見せするものではないのだが、記録としてこれも晒しておく。改善案が思い浮かんだらまた修正しようと思う。

うーん…★