回答:
Modulo(mod、%)は剰余演算子です。
2%2 = 0 (2/2 = 1 remainder 0)
1%2 = 1 (1/2 = 0 remainder 1)
4%2 = 0 (4/2 = 2 remainder 0)
5%2 = 1 (5/2 = 2 remainder 1)
あなたがバナナと人々のグループを使うならば、はるかに簡単です。
これはあなたが表現するだろう、あなたは6人の1本のバナナやグループを持っていると言います:1 mod 6
/ 1 % 6
/ 1 modulo 6
。
十分な栄養と幸せを得るためには、グループの各人に6バナナが必要です。
したがって、1つのバナナがあり、それを6人と共有する必要があるが、グループメンバーごとに1つのバナナ、つまり6人の場合にのみ共有できる場合、1つのバナナを持ちます(残り、の誰にも共有されません)グループ)、2バナナについても同様です。次に、残りのバナナが2つになります(何も共有されません)。
しかし、6人のバナナを取得したら、6人のグループのメンバーごとに1人のバナナが存在し、6人のバナナ6個すべてを共有したときに残りが0個またはバナナが残っていないため、満足するはずです。
これで、7人のバナナと6人のグループの場合は、になります7 mod 6 = 1
。これは、6人にそれぞれ1つのバナナを与え、残りの1つは1つのバナナだからです。
以下のために12 mod 6
6人で共有バナナまたは12、各々は、二つのバナナを持つことになり、残りは次に0です。
これについても、ほんの数分前に混乱しました。それから私は一枚の紙の上で手で割り算をしました、そしてそれは理にかなっています:
これは、コンピュータがこの問題を処理する限りです。コンピュータはそこで停止し、2を返します。これは、「%」(mod)が要求しているものだからです。
私たちは小数を入れて続けるように訓練されてきたので、これは最初は直観に反することがあるのです。
誰かが私に連絡して、質問のコメントで私の答えを詳しく説明するように頼まれました。それで、他の誰かを助けることができる場合に備えて、私はその人に返信したものです:
剰余演算は、ユークリッドdisivionの残りの部分を提供します(実数ではなく整数でのみ機能します)。A = B * C + D(D <Bの場合)であるAがある場合、ユークリッド分割のAをBで割った商はCで、余りはDです。2を4で割ると、商は0、残りは2です。
Aオブジェクト(カットできないもの)があるとします。そして、同じ量のオブジェクトをB人に配布したいとします。B個を超えるオブジェクトがある限り、それぞれに1を与えて繰り返します。残っているオブジェクトがBより少ない場合は、停止して残りのオブジェクトを保持します。この操作を繰り返した回数をCとしましょう。これが商です。最後に保持するオブジェクトの数(Dと呼びましょう)が残りです。
2つのオブジェクトと4つの人がいる場合。すでに4つ未満のオブジェクトがあります。したがって、各人は0個のオブジェクトを取得し、2個を保持します。
そのため、2モジュロ4は2です。
モジュロは、数学的な除算式の剰余であり、整数で表されます。
たとえば、画面の幅が100ピクセルの位置90にあるピクセルを20加算するとします。これは、位置10に折り返されます。なぜ... 90 + 20 = 110、つまり110%100 = 10であるためです。
それを理解するために、私はモジュロは小数の整数表現であると考えています。さらに、式を逆方向に実行して残りを小数として処理し、除数に追加すると、元の答えが得られます。
例:
100
(A) --- = 14 mod 2
7
123
(B) --- = 8 mod 3
15
3
(C) --- = 0 mod 3
4
リバースエンジニアリング:
2 14(7) 2 98 2 100
(A) 14 mod 2 = 14 + --- = ----- + --- = --- + --- = ---
7 7 7 7 7 7
3 8(15) 3 120 3 123
(B) 8 mod 3 = 8 + --- = ----- + --- = --- + --- = ---
15 15 15 15 15 15
3 3
(B) 0 mod 3 = 0 + --- = ---
4 4
モジュロ方程式がどのように読み取られるかについて混乱していると思います。
2/4
2を4で割るような除算方程式を書くとき。
2 % 4
除算2 by 4
(2を4と考える)などの剰余方程式が記述され、残りを返す場合。
それを視覚的に考えるには、特定の例では12ではなく4になる時計の文字盤を想像してください。時計を4から始めて(ゼロから始めるようなものです)、時計回りに次のように回します。 2 "時間"、2に着陸するのと同じように、時計回りに6回転するように2に着陸します(2 mod 4 == 2と同じように、6 mod 4 == 2)。
これはmodr()関数について言及する良い機会かもしれません。部門の全体と残りの部分の両方を返します。
print("\n 17 // 3 =",17//3," # Does the same thing as int(17/3)")
print(" 17 % 3 =",17%3," # Modulo division gives the remainder.")
whole, remain = divmod(17,3)
print(" divmod(17,3) returns ->",divmod(17,3),end="")
print(" because 3 goes into 17,",whole,"times with a remainder of",remain,end=".\n\n")
2 = 0 * 4 + 2
。