Як працює модуль ділення


105

Я не дуже розумію, як працює поділ модулів. Я розраховував 27 % 16і закінчував, 11і я не розумію, чому.

Я, здається, не можу знайти пояснення в умовах мирян в Інтернеті. Чи може хтось детально розробитись на тому, що відбувається тут?

Відповіді:


107

Результатом модульного поділу є залишок цілого ділення заданих чисел.

Це означає:

27 / 16 = 1, remainder 11
=> 27 mod 16 = 11

Інші приклади:

30 / 3 = 10, remainder 0
=> 30 mod 3 = 0

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2

66
будь ласка, не сприймайте це неправильно, але ваші приклади нічого не пояснюють для того, хто не має абсолютно ніякого поняття, що відбувається з модульним поділом. Ви залишили дуже важливі кроки, які пояснюють, звідки береться цей залишок. Відповідь Марсіна М. нижче пояснила процес. Будь ласка, розгляньте детальнішу інформацію у наступних відповідях для тих із нас, хто може взагалі не зрозуміти поняття. Дякуємо, що є членом спільноти! Такі люди, як ти, допомагають мені і продовжують допомагати мені в моїй навчальній подорожі :)
Soundfx4,

Незважаючи на те, що Вікіпедія, модуль та залишок - це не одне і те ж. Деякі мови мають одну, деякі інші, деякі обидві, а деякі не визначені.
Маркіз Лорн

156

Більшість пояснень пропускають один важливий крок, давайте заповнимо прогалину на іншому прикладі.

З огляду на наступне:

Dividend: 16
Divisor: 6

Функція модуля виглядає приблизно так:

16 % 6 = 4

Давайте визначимо, чому це так.

По-перше, виконайте ціле ділення , яке схоже на звичайне ділення, за винятком будь-якого дробового числа (він же залишок):

16 / 6 = 2

Потім множимо результат вищевказаного поділу ( 2) на наш дільник ( 6):

2 * 6 = 12

Нарешті, відніміть результат наведеного множення ( 12) з нашого дивіденду ( 16):

16 - 12 = 4

Результат цього вирахування 4, то залишок , той же результат нашого модуля вище!


1
Як ви отримуєте 2 з 16/6, а не 2 6666666667? Чи слід завжди просто ігнорувати 0, ...? Чому?
Люк

3
@Luc Як згадують Лео та ytpillai, ми використовуємо ціле ділення (де дробова частина результату після ділення відкидається). У Python 3: 16 // 6 >>> 2and16 / 6 >>> 2.6666666666666665
bryik

30

Можливо, приклад з годинником може допомогти вам зрозуміти модуль.

Знайоме використання модульної арифметики - це її використання в 12-годинному годиннику, в якому день ділиться на два 12-годинних періоди.

Скажімо, зараз у нас цей час: 15:00
Але ви також можете сказати, що це 3 вечора

Це саме те, що робить модуль:

15 / 12 = 1, remainder 3

Цей приклад ви краще пояснюєте у wikipedia: Wikipedia Modulo Article


29

Проста формула для обчислення модуля:

[Dividend-{(Dividend/Divisor)*Divisor}]

Отже, 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

Відповідь = 11

Примітка :

Усі обчислення проводяться з цілими числами. У випадку десяткового коефіцієнта частина після десяткової варто ігнорувати / скорочувати.

наприклад: 27/16 = 1,6875 у вищезгаданій формулі слід вважати лише 1. 0,6875 ігнорується.

Компілятори комп'ютерних мов трактують ціле число з десятковою частиною так само (шляхом скорочення після десяткової) також


А як щодо 3% 7?
eaglei22

Так було б просто 3?
eaglei22

15

Оператор модуля приймає оператор поділу і повертає все, що залишилося від цього обчислення, "залишилися" дані, так би мовити, такі як 13/5 = 2. Що означає, що від цього обчислення залишилось 3 або залишилося. Чому? тому що 2 * 5 = 10. Отже, 13 - 10 = 3.

Оператор модуля робить весь цей розрахунок за вас, 13% 5 = 3.


Я думаю, що ця відповідь пояснює це найкраще з концептуальної точки зору. Інші відповіді пояснюють математично, що також необхідно, але це краще допомагає мені зрозуміти, як я міг би застосувати оператор модуля.
JonnyB

7

поділ модуля просто такий: розділіть два числа і поверніть лише решту

27/16 = 1 з залишеним 11, тому 27% 16 = 11

ditto 43/16 = 2 з 11 залишилось, тому 43% 16 = 11 теж



5

Я хотів би додати ще одне:

легко розрахувати модуль, коли дивіденд більший / більший за дільник

дивіденд = 5 дільник = 3

5% 3 = 2

3)5(1
  3
-----
  2

але що робити, якщо дільник менший, ніж дивіденд

дивіденд = 3 дільник = 5

3% 5 = 3 ?? як

Це тому, що оскільки 5 не можуть розділити 3 безпосередньо, модуль буде тим, що є дивідендом


3

Сподіваюся, що ці прості кроки допоможуть:

20 % 3 = 2 
  1. 20 / 3 = 6; не включайте .6667- просто ігноруйте його
  2. 3 * 6 = 18
  3. 20 - 18 = 2, що є залишком модуля

Чи можете ви скоріше відформатувати цю відповідь?
Code Maverick

Перевірте відповідь Джаммера.
Аджмал Салім

2

Простіше, коли ваш номер після десяткової (0.xxx) короткий. Тоді все, що вам потрібно зробити, це помножити це число на число після ділення.

Наприклад: 32 % 12 = 8

Ви це робите. 32/12=2.666666667 Тоді ви відкидаєте 2і зосереджуєтесь на 0.666666667 0.666666667*12=8<- Це ваша відповідь.

(знову ж таки, лише тоді, коли число після десяткового значення коротке)


1

Модульний поділ дає вам решту поділу, а не коефіцієнт.


1

Скажімо, у вас 17 мод 6.

то, що всього 6, тобі буде найближче до 17, це буде 12, бо якщо ти перейдеш за 12, ти матимеш 18, що більше, ніж питання про 17 мод 6. Тоді ти візьмеш 12 і мінус від 17, що дасть тобі Ваша відповідь, в даному випадку 5.

17 мод 6 = 5


1

Поділ модуля досить простий. Він використовує залишок замість частки.

    1.0833... <-- Quotient
   __
12|13
   12
    1 <-- Remainder
    1.00 <-- Remainder can be used to find decimal values
     .96
     .040
     .036
     .0040 <-- remainder of 4 starts repeating here, so the quotient is 1.083333...

13/12 = 1R1, ерго 13% 12 = 1.


Це допомагає мислити модуль як "цикл".

Іншими словами, для виразу n % 12результат завжди буде <12.

Це означає, що послідовність для набору 0..100для n % 12:

{0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,[...],4}

У такому світлі модуль, як і його використання, стає набагато чіткішим.


1

Єдине важливе, що потрібно розуміти, це те, що модуль (позначений тут% як у C) визначається через евклідовий поділ .

Для будь-яких двох (d, q)цілих чисел завжди вірно :

d = ( d / q ) * q + ( d % q )

Як ви бачите, значення значення d%q залежить від значення d/q . У загальному випадку для позитивних цілих чисел d/qє усіченим до нуля , наприклад 5/2 дає 2, отже:

5 = (5/2)*2 + (5%2) => 5 = 2*2 + (5%2) => 5%2 = 1

Однак для негативних цілих чисел ситуація є менш зрозумілою і залежить від мови та / або стандарту. Наприклад, -5/2 може повернути -2 (усічений до нуля, як і раніше), але також може повернути -3 (з іншою мовою).

У першому випадку:

-5 = (-5/2)*2 + (-5%2) => -5 = -2*2 + (-5%2) => -5%2 = -1

але у другому:

-5 = (-5/2)*2 + (-5%2) => -5 = -3*2 + (-5%2) => -5%2 = +1

Як було сказано раніше, просто згадайте інваріант , який є евклідовим поділом .

Детальніше:


1
Дивно корисно щодо пагинации.
Боб Джордан

1

27% 16 = 11

Ви можете інтерпретувати це так:

16 йде 1 раз у 27, перш ніж пройти її.

16 * 2 = 32.

Тож можна сказати, що 16 йде один раз у 27, а решта - 11.

Фактично,

16 + 11 = 27

Інший приклад:

20% 3 = 2

Добре 3 йде 6 разів на 20, перш ніж пройти його.

3 * 6 = 18

Для додавання до 20 нам потрібно 2, так що залишок виразу модуля дорівнює 2.


0

Це просто, оператор Modulus (%) повертає залишок після цілого поділу. Візьмемо для прикладу ваше запитання. Як 27% 16 = 11? Коли ви просто розділите 27 на 16, тобто (27/16), тоді ви отримаєте залишок як 11, і саме тому ваша відповідь - 11.


0

Випишіть таблицю, починаючи з 0.

{0,1,2,3,4}

Продовжуйте таблицю рядками.

{0,1,2,3,4}
{5,6,7,8,9}
{10,11,12,13,14}

Все в стовпці перший кратне 5. Все, що в колонці 2, є кратним 5 з 1, як залишок. Тепер абстрактна частина: Ви можете записати це (1) як 1/5 або як десяткове розширення. Оператор модуля повертає лише стовпчик, або іншим способом мислення він повертає залишок на тривалий поділ. Ви маєте справу з модулем (5). Різний модуль, інша таблиця. Придумайте таблицю хешу.


0

Коли ми ділимо два цілих числа, у нас вийде рівняння, яке виглядає наступним чином:

A / B = Q залишок R

А - дивіденд; B - дільник; Q - коефіцієнт, а R - залишок

Іноді нас цікавить лише те, що залишається, коли ділимо A на B. Для цих випадків існує оператор, який називається оператором модуля (скорочено mod).

Приклади

16/5= 3 Remainder 1  i.e  16 Mod 5 is 1.
0/5= 0 Remainder 0 i.e 0 Mod 5 is 0.
-14/5= 3 Remainder 1 i.e. -14 Mod 5 is 1.

Додаткову інформацію див. У статті академії Хана .

У комп'ютерній науці таблиця Hash використовує оператор Mod для зберігання елемента, де A будуть значення після хешування, B - розмір таблиці, а R - кількість слотів або ключ, куди вставлений елемент.

Див. Як працює хеш-таблиця для отримання додаткової інформації


-1

Це був найкращий підхід для розуміння оператора модуля. Я просто поясню вам на прикладах.

16 % 3

Коли ви розділите ці два числа, решта - результат. Це так, як я це роблю.

16 % 3 = 3 + 3 = 6; 6 + 3 = 9; 9 + 3 = 12; 12 + 3 = 15

Отже, що залишилося до 16 - це 1

16 % 3 = 1

Ось ще один приклад: 16 % 7 = 7 + 7 = 14що залишилося до 16? Є2 16 % 7 = 2

Ще один: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . Отже, залишок дорівнює нулю,24 % 6 = 0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.