もう一人のY君

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

もう一人のY君 MENU  MENU

【iPhoneショートカット】最大公約数を求めるレシピ(iOS14改善版)

f:id:thetheorier:20201008104634p:plain

 「計算式」アクションの登場で数計算関連のレシピの多くの改善が見込めます.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

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

 レビュー時のiOSバージョン : iOS14.0.1

 

 

スポンサーリンク

 

 

 

ダウンロード・使い方

 

https://www.icloud.com/shortcuts/822a4180d497452e9125e75afa9c7798

 

 

 最初の「入力を要求」にも書いてありますが, 2数の表記は例えば17,19のように","で区切って入力します.

 2数を分けて入力させるのが面倒だったというだけです.

 

 

フロー

f:id:thetheorier:20201008105340p:plain

 上でも書いた通り, a,bという形で2数を入力させ, ","で分割して各々の数を取得します.

 

 

f:id:thetheorier:20201008105437p:plain

 上で定義した変数a,bは表示のために使うので, 演算用にそれぞれx,yの変数に置き, 更に演算効率のためにx>yとなるようにします.

 

 

f:id:thetheorier:20201008105618p:plain

 ここから実際の処理を行います.

 処理はユークリッドの互除法を利用しています, そのため繰り返し回数nは

 

 n\leq 1+\frac{\log{y}}{\log{\varphi}}

 

 を満たします, なのでこれを更にfloorで小数点を切り捨てて繰り返し回数としています.

 

 もしfmod(x,y)=0ならばyがxの約数なのでgcd(x,y)=yであることは確定です.

 そうでなく, かつ1余るなら2数は互いに素なのでgcd(x,y)=1であることが確定します.

 上記のどちらでもなかった場合は, xをyに代入し, yをfmod(x,y)の値に上書きして繰り返しに戻ります.

 

 

実行

f:id:thetheorier:20201008111400p:plain

 これで結果が正しければOKですね.

 

 

f:id:thetheorier:20201008111446p:plain

 普通では扱わないような大きな数でも待たされることなく素早く結果を返してくれます.

 

 

 原始言語からの脱却で数処理の速度がかなりよくなりました.

 他のレシピも追々修正予定です.