Відповіді:
Результатом модульного поділу є залишок цілого ділення заданих чисел.
Це означає:
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
Більшість пояснень пропускають один важливий крок, давайте заповнимо прогалину на іншому прикладі.
З огляду на наступне:
Dividend: 16
Divisor: 6
Функція модуля виглядає приблизно так:
16 % 6 = 4
Давайте визначимо, чому це так.
По-перше, виконайте ціле ділення , яке схоже на звичайне ділення, за винятком будь-якого дробового числа (він же залишок):
16 / 6 = 2
Потім множимо результат вищевказаного поділу ( 2
) на наш дільник ( 6
):
2 * 6 = 12
Нарешті, відніміть результат наведеного множення ( 12
) з нашого дивіденду ( 16
):
16 - 12 = 4
Результат цього вирахування 4
, то залишок , той же результат нашого модуля вище!
16 // 6 >>> 2
and16 / 6 >>> 2.6666666666666665
Можливо, приклад з годинником може допомогти вам зрозуміти модуль.
Знайоме використання модульної арифметики - це її використання в 12-годинному годиннику, в якому день ділиться на два 12-годинних періоди.
Скажімо, зараз у нас цей час: 15:00
Але ви також можете сказати, що це 3 вечора
Це саме те, що робить модуль:
15 / 12 = 1, remainder 3
Цей приклад ви краще пояснюєте у wikipedia: Wikipedia Modulo Article
Проста формула для обчислення модуля:
[Dividend-{(Dividend/Divisor)*Divisor}]
Отже, 27% 16: -
27- {(27/16) * 16}
27- {1 * 16}
Відповідь = 11
Примітка :
Усі обчислення проводяться з цілими числами. У випадку десяткового коефіцієнта частина після десяткової варто ігнорувати / скорочувати.
наприклад: 27/16 = 1,6875 у вищезгаданій формулі слід вважати лише 1. 0,6875 ігнорується.
Компілятори комп'ютерних мов трактують ціле число з десятковою частиною так само (шляхом скорочення після десяткової) також
Оператор модуля приймає оператор поділу і повертає все, що залишилося від цього обчислення, "залишилися" дані, так би мовити, такі як 13/5 = 2. Що означає, що від цього обчислення залишилось 3 або залишилося. Чому? тому що 2 * 5 = 10. Отже, 13 - 10 = 3.
Оператор модуля робить весь цей розрахунок за вас, 13% 5 = 3.
Я хотів би додати ще одне:
легко розрахувати модуль, коли дивіденд більший / більший за дільник
дивіденд = 5 дільник = 3
5% 3 = 2
3)5(1
3
-----
2
але що робити, якщо дільник менший, ніж дивіденд
дивіденд = 3 дільник = 5
3% 5 = 3 ?? як
Це тому, що оскільки 5 не можуть розділити 3 безпосередньо, модуль буде тим, що є дивідендом
Сподіваюся, що ці прості кроки допоможуть:
20 % 3 = 2
20 / 3 = 6
; не включайте .6667
- просто ігноруйте його3 * 6 = 18
20 - 18 = 2
, що є залишком модуляПростіше, коли ваш номер після десяткової (0.xxx) короткий. Тоді все, що вам потрібно зробити, це помножити це число на число після ділення.
Наприклад: 32 % 12 = 8
Ви це робите. 32/12=2.666666667
Тоді ви відкидаєте 2
і зосереджуєтесь на 0.666666667
0.666666667*12=8
<- Це ваша відповідь.
(знову ж таки, лише тоді, коли число після десяткового значення коротке)
Поділ модуля досить простий. Він використовує залишок замість частки.
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}
У такому світлі модуль, як і його використання, стає набагато чіткішим.
Єдине важливе, що потрібно розуміти, це те, що модуль (позначений тут% як у 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
Як було сказано раніше, просто згадайте інваріант , який є евклідовим поділом .
Детальніше:
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.
Це просто, оператор Modulus (%) повертає залишок після цілого поділу. Візьмемо для прикладу ваше запитання. Як 27% 16 = 11? Коли ви просто розділите 27 на 16, тобто (27/16), тоді ви отримаєте залишок як 11, і саме тому ваша відповідь - 11.
Випишіть таблицю, починаючи з 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). Різний модуль, інша таблиця. Придумайте таблицю хешу.
Коли ми ділимо два цілих числа, у нас вийде рівняння, яке виглядає наступним чином:
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 - кількість слотів або ключ, куди вставлений елемент.
Див. Як працює хеш-таблиця для отримання додаткової інформації
Це був найкращий підхід для розуміння оператора модуля. Я просто поясню вам на прикладах.
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