ホームページ > バックエンド開発 > Python チュートリアル > Python は最大公約数を解くメソッドを実装します

Python は最大公約数を解くメソッドを実装します

php中世界最好的语言
リリース: 2018-04-09 15:50:25
オリジナル
5969 人が閲覧しました

今回は、最大公約数を解決するための Python メソッドを紹介します。 最大公約数を解決するための Python の メモ は何ですか? ここでは実際のケースを見てみましょう。

まずアルゴリズムの説明をインターネットから抜粋すると以下の通りです:

追加位相減算法:更新位相減算法とも呼ばれ、「算術九章」より最大公約数を求めるアルゴリズムです。本来はリダクション用に設計されたものですが、最大公約数が求められるあらゆる場面に適しています。

「算術九章」は、古代中国の数学の論文で、その中にある「追加の減算法」は、2 つの数値の最大公約数を求めるために使用できます。つまり、「半分が半分にできる場合は、半分になります。」それは半分であり、半分が半分になれない場合はその逆です。」 分母と引き算の数を設定し、引き算の数を減らすことで引き算の数を減らします。ステップ 1: 任意の 2 つの正の整数 が与えられ、それらがすべて偶数であるかどうかを判断します。はいの場合は 2 を使用して削減し、そうでない場合は 2 番目のステップを実行します。

ステップ 2: 大きい数値から小さい数値を引き、得られた差を小さい数値と比較し、大きい数値から数値を減らします。結果の減数と差が等しくなるまでこの操作を続けます。

上記の説明を読んだ後の私の最初の反応は、この説明に何か問題があるのではないかということでした。普遍性という点では問題もあるはずだ。たとえば、4 と 4 の最大公約数を見つけた場合、半分と半分の後の結果は間違っているはずです。次のアルゴリズムも実行できません。 とにかく、最初に上記のアルゴリズムの説明を実装しましょう:

# -*- coding:utf-8 -*-
#! python2
def MaxCommpisor(m,n):
  # even process
  while m % 2 == 0 and n % 2 == 0:
    m = m / 2
    n = n / 2
  # exchange order when needed
  if m < n:
    m,n = n,m
  # calculate the max comm pisor
  while m - n != n:
    diff = m - n
    if diff > n:
      m = diff
    else:
      m = n
      n = diff
  return n
print(MaxCommpisor(55,120))
print(MaxCommpisor(55,77))
print(MaxCommpisor(32,64))
print(MaxCommpisor(16,128))
ログイン後にコピー

動作結果:

言うまでもなく、上記のプログラムの実行はエラーでいっぱいです。それで、それを修正するにはどうすればよいでしょうか?

まず、2で割ったものはすべて最後に逆算する必要があります。このようにして、プログラムは次のように変更されます。

def MaxCommpisor(m,n):
  com_factor = 1
  if m == n:
    return n
  else:
    # process for even number
    while m % 2 == 0 and n % 2 == 0:
      m = int(m / 2)
      n = int(n / 2)
      com_factor *= 2
    if m < n:
      m,n = n,m
    diff = m - n
    while n != diff:
      m = diff
      if m < n:
        m,n = n,m
      diff = m - n
    return n * com_factor
print(MaxCommpisor(55,120))
print(MaxCommpisor(55,77))
print(MaxCommpisor(32,64))
print(MaxCommpisor(16,128))
ログイン後にコピー
変更後の上記プログラムの実行結果は次のとおりです

このプログラムを作成すると、少し奇妙に見えますが、全体的なアルゴリズムは依然として実装されています。ユークリッド除算などのアルゴリズムと比較すると、

ループ

のレベルでこの確率はある程度軽減されます。特に、テスト番号の最後の 2 つのペアについては、この場合の効果がより優れています。ただし、アルゴリズムの全体的な効率を正確に測定することはまだできません。

この記事の事例を読んだ後、あなたはその方法をマスターしたと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

Pycharm の使用スキルのまとめ

Python で 2 次元配列のローカル ピーク値を取得する方法

以上がPython は最大公約数を解くメソッドを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート