Понимание оператора модуля%
Я понимаю оператор модуля в терминах следующего выражения:
7 % 5
Это вернет 2 из-за того, что 5 переходит в 7 один раз, а затем дает оставшееся 2, однако мое замешательство приходит, когда вы отменяете это утверждение следующим образом:
5 % 7
Это дает мне значение 5, которое меня смущает. Хотя все 7 не входят в 5, часть его делает так, почему нет либо остатка, либо остатка положительного или отрицательного 2?
Если он вычисляет значение 5 на основании того, что 7 вообще не входит в 5, почему остальная часть тогда не 7 вместо 5?
Мне кажется, что в моем понимании оператора модуля есть что-то, чего я не вижу.
Ответы
Ответ 1
(Это объяснение только для положительных чисел, так как в противном случае оно зависит от языка)
Определение
Модуль является остатком евклидова деления одного числа на другое. %
называется операцией по модулю.
Например, 9
деленное на 4
равно 2
но остается 1
. Здесь 9/4 = 2
и 9 % 4 = 1
.
![Euclidean Division]()
В вашем примере: 5, деленное на 7, дает 0, но остается 5 (5 % 7 == 5
).
расчет
Операция по модулю может быть рассчитана с использованием этого уравнения:
a % b = a - floor(a / b) * b
-
floor(a/b)
представляет собой количество раз, вы можете разделить на a
b
-
floor(a/b) * b
- сумма, которая была полностью разделена - Общее (
a
) минус то, что было разделено, равно остатку от деления
Применительно к последнему примеру это дает:
5 % 7 = 5 - floor(5 / 7) * 7 = 5
Модульная арифметика
Тем не менее, ваша интуиция заключалась в том, что это может быть -2, а не 5. На самом деле, в модульной арифметике, -2 = 5 (mod 7)
потому что существует k в Z, такое что 7k - 2 = 5
.
Возможно, вы не изучили модульную арифметику, но вы, вероятно, использовали углы и знаете, что -90 ° - это то же самое, что 270 °, потому что это по модулю 360. Это похоже, оно оборачивается! Итак, возьмите кружок и скажите, что его периметр равен 7. Затем вы читаете, где находится 5. И если вы попробуете с 10, это должно быть 3, потому что 10 % 7
- это 3.
Ответ 2
Как указывали другие, модуль основывается на системе остатков.
Я думаю, что более простой способ думать о модуле - это то, что остается после того, как дивиденд (число, которое нужно разделить) было полностью разделено делителем. Так что, если мы думаем о 5% 7, когда вы разделите 5 на 7, 7 могут перейти в 5 только 0 раз, а когда вы вычтите 0 (7 * 0) из 5 (точно так же, как мы учились в начальной школе), то остаток будет 5 (мода). См. Иллюстрацию ниже.
0
______
7) 5
__-0____
5
С той же логикой -5 mod 7 будет -5 (только 0 7s могут идти в -5 и -5-0 * 7 = -5). С этим же токеном -5 mod -7 также будет -5.
Еще несколько интересных случаев:
5 mod (-3) = 2, то есть 5 - (-3 * -1)
(- 5) mod (-3) = -2, т.е. -5 - (-3 * 1) = -5 + 3
Ответ 3
Некоторые ответы здесь сложны для понимания. Я попытаюсь добавить еще один ответ, чтобы упростить способ взглянуть на это:
Процесс в основном состоит в том, чтобы задать два вопроса:
Например, 7% 5
(1) Какое число умножить на 5, чтобы получить 7? (Начиная с 0)
Давай попробуем:
0
так, 0 x 5 = 0
Тем не менее, у нас мало, поэтому мы добавляем один (+1).
1
так, 1 x 5 = 5
Мы еще не получили 7, поэтому мы добавляем один (+1).
2
т, 2 x 5 = 10
Сейчас мы превысили 7
. Так что 2
не правильно, давайте вернемся к значению на первом этапе (где мы использовали 1
), и результат был 5
.
(2) Сколько нам нужно добавить к 5, чтобы получить 7?
Понятно, что число 2. 7-5 = 2
.
7 % 5 = 2;
Например, 5% 7
1- Какое число мы используем, чтобы умножить 7, чтобы получить 5?
Давай попробуем:
0
так, 0 x 7 = 0
Мы еще не получили 5, давайте попробуем большее число.
1
так, 1 x 7 = 7
О нет, мы превысили 5
, давайте вернемся к предыдущему шагу, где мы использовали 0
и получили результат 0
.
2- Сколько нам нужно добавить к 0
(число, которое мы только что получили на шаге 1), чтобы достичь значения числа слева 5
?
Понятно, что число 5. 5-0 = 5
5 % 7 = 5
Надеюсь, это поможет.
Ответ 4
модуль - система остатков.
Итак, 7% 5 = 2.
5% 7 = 5
3% 7 = 3
2% 7 = 2
1% 7 = 1
При использовании внутри функции для определения индекса массива. Это безопасное программирование? Это другой вопрос. Я полагаю.
Ответ 5
Шаг 1: 5/7 = 0,71
Шаг 2: Возьмите левую часть десятичной дроби, поэтому мы берем 0 из 0,71 и умножаем на 7 0 * 7 = 0;
Шаг №: 5-0 = 5; Следовательно, 5% 7 = 5
Ответ 6
Это как раз об остатках. Позвольте мне показать вам, как
10 % 5=0
9 % 5=4 (because the remainder of 9 when divided by 5 is 4)
8 % 5=3
7 % 5=2
6 % 5=1
5 % 5=0 (because it is fully divisible by 5)
Теперь мы должны помнить одну вещь, мод означает остаток так
4 % 5=4
а почему 4? потому что 5 X 0 = 0, поэтому 0 является ближайшим кратным, который меньше 4, следовательно, 4-0 = 4
Ответ 7
Новый способ узнать остальную часть приведен ниже
Заявление: остаток всегда постоянный
ex : 26 divided by 7 gives R : 5
это можно легко обнаружить, найдя число, полностью делящее 26, которое ближе к
делителя и принимая различие между
13 is the next number after 7 that completely divides 26 because after 7 comes 8, 9 ,
10, 11, 12 where none of them divides 26 completely and give remainder 0.
So 13 is the closest number to 7 which divides to give Remainder 0.
now take the difference (13 ~ 7) = 5 which is the Remainder .
note : for this to work divisor should be reduced to its simplest form ex: if 14
is the divisor ..7 has to be chosen to find the closest number dividing the dividend.
Ответ 8
Оператор модуля дает вам результат в системе с уменьшенными остатками. Например, для mod 5 подсчитываются 5 целых чисел: 0,1,2,3,4. Действительно, 19 = 12 = 5 = -2 = -9 (mod 7). Основное различие заключается в том, что ответ дается языками программирования с помощью "системы сокращенных вычетов".
Ответ 9
Давайте сформулируем это так:
на самом деле оператор модуля выполняет то же самое деление, но ему нет дела до ответа, он заботится о напоминании, например, если вы делите 7 на 5,
Итак, позвольте мне привести простой пример:
думаю, 5 представляет собой блок, то, например, мы будем иметь 3 блоков в 15 (с ничего не осталось), но когда loginc приходит к этому своего рода чисел {1,3,5,7,9,11,...}, вот где выходит модуль, так что возьмите ту логику, которую я говорил ранее, и примените ее для 7, так что ответ будет таким: у нас есть 1 блок из 5 в 7 => с 2 напоминаниями в нашей руке! это модуль !!!
но вы спрашивали о 5% 7, верно?
так что возьмите логику, которую я сказал, сколько 7 блоков у нас в 5???? 0
поэтому модуль возвращает 0...
это...
Ответ 10
Хан Академия имеет хорошее описание:https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic