もう一人のY君

iPhoneアプリのレビューやアップデートレビューなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU

【ショートカット】オイラーのφ関数

181110_73

 今回はオイラーのφ関数です.

 ベタな組み方でも処理に大きな問題のない内容でした.

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のバージョン : v2.1.1

 

スポンサーリンク

 

 

オイラーのφ関数

 オイラーのφ関数とは, 自然数 { \displaystyle m } に対して, { \displaystyle 1 } から { \displaystyle m } までの自然数に対して { \displaystyle m } と互いに素であるものの個数を与える関数です.

 

 例えば { \displaystyle 8 } 以下の自然数で { \displaystyle 8 } と互いに素である自然数は { \displaystyle 1,\,3,\,5,\,7 } の { \displaystyle 4 } 個なので, { \displaystyle \varphi(8)=4 } となります.

 

 φ関数については, 自然数 { \displaystyle m,\,n } や素数 { \displaystyle p }, 指数 { \displaystyle e } について以下の性質を持っていますが今回は用いず, 素直に1から順に最大公約数を確認します.

 

  • { \displaystyle \varphi(mn)=\varphi(m)\varphi(n) }
  • { \displaystyle \varphi(p^e)=p^e-p^{e-1} }

 

 

フロー

181110_74

 まず m に相当する値を用意し, カウンタ用に同時に変数 n にも代入します.

 またφ関数の結果としてのカウンタ変数 φ(初期値0) も用意します.

 

 

181110_75

 以降は入力を要求で与えた数だけ, m自身とカウンタ変数nとが互いに後であるかをユークリッドの互除法である関数を実行して確かめます.

 互いに素である時のみ変数φに1を足します.

 

 

181110_76

 互いに素であるかどうかの「次の場合」を抜け,  n を1つ減らします.

 これでループが抜けたときには変数 φ には φ(m) の値となっていることになります.

 

 

実行

181110_77

 実行して結果が正しいことを確かめます.

 

 

 これもまた無駄な処理が多いため, 値が大きくなると弱いです.

 素因数分解して最初に紹介した性質を使った方が現実的でしょうね.