コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
さすらいの名無し ◆LWMA5UzCJb3e
2020/10/3 15:11
質問
最大公約数の求め方
最大公約数を求めるプログラムを教えてください。こういちさんの問題で使い(流用?)ます。できればネタバレで

コメント

アバター
SatoshiMcCloud 2020/10/3 16:01 ◆Z1qfV11i63Jr
RETURN 1 しちゃダメでしょ
アバター
Na 2020/10/3 16:06 ◆QoELVrBXBQCI
ちなみにPetitverseでインデントは全角スペースを使うとうまくいきます。
アバター
SatoshiMcCloud 2020/10/3 16:11 ◆Z1qfV11i63Jr
プログラムが合ってるかどうかは、実際に動かして確認するのが一番良いと思います
アバター
Na 2020/10/3 16:15 ◆QoELVrBXBQCI
>ただ、スピード面だとやっぱり互除法の方が速いんですかね…?
例えば
「8765と4321の最大公約数は?」
全部試す場合
8765 mod 4321 = 123
8765 mod 4320 = 125
8765 mod 4319 = 127
...(以下、4000回以上繰り返す)

互除法の場合
8765 = 4321 * 2 + 123
4321 = 123 * 35 + 16
123 = 16 * 7 + 11
16 = 11 * 1 + 5
11 = 5 * 2 + 1
5 = 1 * 5 + 0
よって最大公約数は1 (終)
アバター
こういち 2020/10/3 16:22 ◆.Id/aHiU36hu
ただ、スピード面だとやっぱり互除法の方が速いんですかね…?
A=MIN(N,M)
だとすると、
NaさんのそれはAに比例した時間。高速化すればSQRT(A)に比例した時間がかかります。
互除法はLOG(A,1.62)に比例した時間がかかって(これは最悪ケースの場合で、平均的にはもうちょっと速い)、例えばAが整数の最大値っった場合、Naさんのそれは60000回程度計算が必要になるのに対して、互除法は50回かからないので、速度だとかなり互除法が有利です。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -