Как работает операция по модулю, когда первое число меньше?

Я возился с операцией по модулю в python, и я понимаю, что он вернет остаток.

Но что, если первое число меньше второго?

например

2% 5 ответ 2.

Как это работает?

2/5 = .4


person Pete    schedule 08.10.2009    source источник
comment
Вы утверждали, что 2/5 = 0,4, но это неправильно. Попробуйте ввести 2/5 в REPL.   -  person Chris Martin    schedule 15.06.2013
comment
12 % 5 = 2 потому что 5 x 2 = 10 и 12 - 10 = 2   -  person spencer.sm    schedule 22.01.2017
comment
2 % 5 = 2 потому что 5 x 0 = 0 и 2 - 0 = 2   -  person spencer.sm    schedule 22.01.2017
comment
@ spencer.sm Отличное объяснение - вы должны превратить его в ответ.   -  person MadHatter    schedule 01.06.2018


Ответы (18)


Помогает ли это

22  % 5 = 2 
17  % 5 = 2 
12  % 5 = 2 
7   % 5 = 2 
2   % 5 = 2

Может быть, это

22 / 5 = 4 + 2/5
17 / 5 = 3 + 2/5
12 / 5 = 2 + 2/5
7  / 5 = 1 + 2/5
2  / 5 = 0 + 2/5
person jrhicks    schedule 08.10.2009

5 переходит в 2 нулевых раза.

5*0 = 0

2-0 = 2.

Ответ - 2.

person MedicineMan    schedule 08.10.2009

2, разделенное на 5 (целочисленное деление), равно 0 с остатком 2.

person qpingu    schedule 08.10.2009

2 = 0 x 5 + 2

person Pascal Thivent    schedule 08.10.2009

На самом деле за ужином легко вычислить результаты по модулю, когда первое число меньше. Результат всегда равен первому (меньшему) числу.

3 % 5 = 3
5 % 10 = 5
78 % 112 = 78

Попробуй сам.

person Doug Steinberg    schedule 14.06.2013

например 2% 5 ответ 2. Как это работает? 2/5 = 0,4!

Modulo по своей сути дает целочисленный результат, тогда как деление может быть целым числом или операцией с плавающей запятой. Ваше наблюдение, что 2/5 равно 0,4, указывает на то, что вы думаете в терминах с плавающей запятой. В этом случае .4 само по себе является остатком, выраженным по-другому. Целая часть «0,4» - это «0», а оставшаяся часть - «.4». Остальная часть операции целочисленного деления - это то же самое, что и дробная (или «десятичная», в разговорной терминологии) часть операции с плавающей запятой, только выраженная по-другому.

Дробная часть вашего примера, 0,4, может быть выражена как 0,4 или как 2/5 (две пятых); в любом случае это одно и то же. Обратите внимание, что когда оно записано как 2/5, знаменатель (делитель) дробной части совпадает со знаменателем (делителем) исходной задачи, а числитель (делимое) дробной части - это то, что называется «остаток» в целочисленном делении. Как ни крути, дробная часть частного и остаток представляют одно и то же ( часть дивиденда, которая не может быть равномерно разделена делителем), просто выраженная по-другому.

person phonetagger    schedule 02.03.2012
comment
Нет, .4 - это частное, а при действительном делении нет остатка. Остальное также не имеет смысла, поскольку подразумевает, что правильное значение модуля - 0,4 округлено или усечено до нуля. - person user207421; 15.06.2013
comment
@EJP - Мне жаль, что мой ответ не имел для вас смысла. При реальном делении дивиденд, деленный на делитель, дает частное. Частное может быть выражено по-разному: оно может быть выражено как единичная величина (в различных формах) или как целое число, представляющее целое число раз, когда дивиденд может быть равномерно разделен на делитель, и если есть какая-либо сумма, оставшаяся сверх этого не делится на делитель поровну, это остаток. Остаток - это именно та часть частного, которая упала бы справа от десятичной точки, только выраженная по-другому. - person phonetagger; 17.06.2013
comment
Пользователь в первом комментарии ошибается, оспаривая это только потому, что он не понял. Это имеет смысл и является прекрасным объяснением математики, стоящей за оператором. Мне было полезно думать об «остатке» как о другом способе выражения дробной составляющей результата деления! - person smohyee; 19.10.2018

Если первое число меньше, то ответом снова будет это первое число.

Поскольку второе число больше, оно «переходит» в первое число ноль раз, а остаток - это целое первое число.

edit: повторно посещая эту ветку, я должен был вспомнить, для чего был этот оператор. Я сослался на эту другую ветку здесь:

Как узнать, когда использовать оператор модуля

person Darryl Calder    schedule 15.11.2018

Вы можете думать об этом как о 2/5 = 0 с остатком 2 от 5.

person akf    schedule 08.10.2009

Числитель в остатке - это ваш ответ по модулю, независимо от того, что, независимо от того, больше или меньше числитель, чем знаменатель.

12 % 5 = 2 , because 12 / 5 = 2 and **2**/5

9 % 2 = 1 , because 9 / 2 = 4 and **1**/2

В этом может быть больше смысла.

5 % 89 = 5 , because 5 / 89 = 0 and **5**/89

5 % 365 = 5 , because 5 / 365 = 0 and **5**/365

5 % 6 = 5 , because 5 / 6 = 0 and **5**/6
person Emerson    schedule 02.02.2015

Также следует отметить, что если первое число (a) является отрицательным числом, ответ всегда будет разницей второго числа с первым числом (n-a).

Пример: a% n

  1. -5 % 7 = 2 ---> 7 - 5 = 2
  2. 4% -9 = -5 ---> 9-4 = -5 (следите за знаком большего числа)

Если оба числа были отрицательными, ответом всегда будет отрицательное число, равное меньшему числу.

  1. -5 % -7 = -5
  2. -4 % -9 = -4
person aldennis    schedule 24.07.2017

a%b = a/b=c,
      c*b=d,
      a-d=modulo;

Это то, что делает python, модифицируя два числа или около того, я думаю. По модулю между меньшим числом и большим числом всегда будет меньшее число.

person Josh    schedule 16.02.2016
comment
Это новый ответ? Какая новая информация по сравнению с другими? - person jogo; 21.02.2016
comment
Комментируйте, не читайте комментарии. Потом прочитал их, но не смог стереть свой комментарий. Полагаю, я извиняюсь. - person Josh; 22.02.2016

Нет числа, которое умножило бы 5, чтобы приблизить вас к 2.

Другими словами, x должен быть 0, чтобы удовлетворять уравнению: 5*x + r = 2.

person dud3    schedule 22.01.2017

Чтобы понять модульную арифметику, я предлагаю вам зайти в Khan Academy и прочитать их пост об этом. У них также есть интерактивные практические вопросы на той же странице. Вот ссылка: https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic

Короче:

Используйте следующее уравнение:

A = BQ + R

A - это дивиденд

B - это делитель

Q - это частное

R - это остаток, результат по модулю.

Q = (A/B)

Имейте в виду, что Q всегда идет до ближайшего наименьшего целого числа. Итак, если Q = 0,2, то Q = 0,0. Если Q = -1,2, то Q = -2,0.

Если в Q нет десятичных знаков, ваш окончательный ответ - 0 (R = 0).


На ваш вопрос:

Q = (2/5) = 0.4, so Q = 0.

Вставьте это в 'A = BQ + R':

2 = 5*0 + R

So, R = 2.


Надеюсь это поможет. Как я уже сказал, вы можете прочитать больше об Академии Хана. Вот ссылка: https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/what-is-modular-arithmetic

person H. Almidan    schedule 10.07.2018

В случае, например, 2% 5 = 2: в реальном математическом остатке равен 0, а частное - 0,4, но в программировании он видит, что 2 меньше 5 означает 5 * 1 = 5, поэтому он становится низким и просто делит его на 0, чтобы он стал меньше, что равно 0. Следовательно, остаток становится 2, потому что 2-0 = 2;)

person Farrukh Ahmed    schedule 20.11.2020

Как продолжение для нас, людей, не обладающих математическим мозгом, я думаю, что отчасти проблема в понимании этого заключается в том, что концепция часто упрощается, как то, что остается, когда вы делите x на y, что, когда x меньше, ничто, иначе 0. Я мог бы сказать, что более надежный способ

  1. Сколько раз y полностью переходит в x?
  2. Возьмите это число и умножьте его на y, чтобы максимально приблизиться к x.
  3. Теперь вычтите то, что вы получили на шаге 2, из x, это ваш модуль.

So in 2 (as x) % 5 (as y):

  1. 5 полностью переходит в 2, поэтому 0
  2. 0 (результат вышеприведенного шага), умноженный на 5 (также известный как y), равен 0
  3. 2 (он же x) - 0 (произведение из шага выше) равно 2
person GSchriver    schedule 20.03.2021

Modulo работает, отдавая остаток после деления, одна вещь, для которой он полезен, - это
-поиск четного числа или нет
Пример кода:

// 4 % 2 means "2 divided by 2 is what, and what is the remainder? if I have a remainder, return it or else return 0"
if(4 % 2 == 0) {
  alert("2 is even");
} else {
  alert("2 is odd");
}

Таким образом, если остаток 4% 2 равен 0, он четный или нечетный.

person Helios    schedule 04.06.2021
comment
Это версия Modulo для JavaScript. - person Helios; 04.06.2021
comment
Как это решить фактический вопрос о том, что происходит, когда первый операнд меньше второго? - person Adrian Mole; 04.06.2021

person    schedule
comment
Я думаю, вы имеете в виду, если 0 < a < b ... если a отрицательно, то у вас проблемы. - person Matthew Scharley; 08.10.2009
comment
хороший улов, я должен был быть более точным. - person ; 08.10.2009

person    schedule
comment
Не могли бы вы немного расширить это или вместо этого добавить в качестве комментария? Некоторым здесь может быть трудно понять ваше мнение. Спасибо! - person Fabian Schultz; 11.01.2017