読者です 読者をやめる 読者になる 読者になる

PEをMathematicaで

Project Eulerに挑戦してみよう

Project Euler 70 / ファイ関数の置換

オイラーのファイ関数 φ(n)とは,n 未満の正の整数で n と互いに素なものの個数を表す。たとえば1, 2, 4, 5, 7, 8は9未満で9と互いに素であるので, φ(9) = 6 となる。1はすべての正の整数と互いに素であるとみなされ,φ(1) = 1 である。

面白いことに φ(87109)=79180 であり,87109は79180を置換したものとなっている。

1 < n < 10^7 で φ(n) が n を置換したものになっているもののうち,n/φ(n) が最小となる n を求めよ。

Problem 70 - Project Euler


並べ替えの判定は Sort[IntegerDigits[ ]] でやりました。この方法はこれまでに何度も使っていて,我ながら「芸がないなー」と思いますが,各数字の登場回数を返す DigitCount[ ] を使うと計算時間が6倍になってしまうので致し方なしです。

Sort の使い方や最小値の抽出法で試行錯誤しましたが,出来上がったのはごく当たり前のコードでした。