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

Haskell で Project Euler を解く素人遊び

Problem 70

引き続きオイラーのφ関数; 今度は n と φ(n) が順列入れ替えの関係にあるものを探す。
n / φ(n) が最小となる n < 10,000,000 を求める。

懸案が多い。
n / φ(n) が小さいということは、素因数は少ないほうがいいんだろうという予想は立つものの、厳密に証明しようとすると難しい。とりあえず2つの素数の積の中から答えを探索する方針で行く。
探索する素数の上限も怪しい。厳密には素数p,qに対して p☓q < 10,000,000なのだが、これを律儀にやっていては計算が終わらない。適当に範囲を絞るが根拠はない。



その辺に目を瞑りつつ、ゴニョゴニョと計算すると、一応正解には辿り着く。   

 

とりあえず答えがあっていたというだけの…★