1

更新:わからないときは3 %4 =0...

def gcd(a, b):
    """Calculate the Greatest Common Divisor of a and b.

    Unless b==0, the result will have the same sign as b (so that when
    b is divided by it, the result comes out positive).
    """
    while b:
        a, b = b, a%b
    return a

次のように機能すると思います。

gcd(3,4) => while 4: => 3,4 = 4, 3%4 => 
4

2 に答える 2

6

これを順を追って見ていきましょう。

def gcd(a, b):

gcdこれにより、変数abその計算を使用する新しい関数が定義されます。これらの値は、関数を開始する前に設定する必要があります。

while b:

数値が 0 に相当しない限り、真と見なされます。= 0 の場合b、コードのこの部分は実行されません。

 a, b = b, a%b

わかりやすくするために、これを 2 行に拡張します。

a = b
b = a%b

最初の部分はかなり自明ですが、2番目の部分は明らかにそうではありません。Modulo は、最も基本的な状態で 2 つの数値の余りを返す数学関数のa%bPython 式です。a (mod b)たとえば、12%5 = 2; の余り12/5は 2 です。

ただし、実際のコードを記述するときは、必ず同じ行に配置してください。「1 行では、代入が同時に行われます (タプルのパッキングとアンパッキングのおかげです。2 行では、代入が次々に行われるため、間違った答えが返されます (b は常に 0 になります)」 -ティム)

これらの行は、変数が 0 に等しくなるまで無限に繰り返されますb。その後、コードはこれを実行します。

return a

これにより、プログラムの残りの部分に値が返さaれ、後で使用できるようになります。機能も終了します。

ユークリッドの方程式 (そして... 私は暗号と数学が好きなので、「拡張」版)について詳しく読むには、このウィキペディアのページにアクセスしてください。

これがお役に立てば幸いです。

于 2013-02-21T04:17:28.400 に答える
1

これは gcd 関数の再帰バージョンです。

def gcd(a, b):
    c = a%b
    if c == 0:
        return b
    return gcd(b, c)
于 2014-08-26T15:48:37.753 に答える