Como funciona a divisão do módulo

105

Eu realmente não entendo como funciona a divisão de módulo. Eu estava calculando 27 % 16e acabei com 11e não entendo por quê.

Não consigo encontrar uma explicação em termos leigos online. Alguém pode elaborar em um nível muito alto o que está acontecendo aqui?

NSWOA
fonte

Respostas:

107

O resultado de uma divisão de módulo é o resto de uma divisão inteira dos números fornecidos.

Que significa:

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

Outros exemplos:

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

35 / 3 = 11, remainder 2
=> 35 mod 3 = 2
Leo
fonte
66
por favor, não leve a mal, mas seus exemplos não esclarecem nada para alguém que não tem absolutamente nenhuma ideia do que está acontecendo com uma divisão modulosa. Você omitiu etapas muito importantes que explicam de onde vem esse resto. A resposta de Marcin M. abaixo explica melhor o processo. Considere ser mais detalhado em respostas futuras para aqueles de nós que podem não ter uma compreensão de um conceito. Obrigado por ser um membro contribuidor para a comunidade! Pessoas como você me ajudam e continuam a me ajudar em minha jornada educacional :)
Soundfx4
Apesar da Wikipedia, módulo e resto não são a mesma coisa. Alguns idiomas têm um, alguns o outro, alguns ambos e alguns indefinidos.
Marquês de Lorne
156

A maioria das explicações perde uma etapa importante, vamos preencher a lacuna usando outro exemplo.

Dado o seguinte:

Dividend: 16
Divisor: 6

A função de módulo se parece com isto:

16 % 6 = 4

Vamos determinar por que isso acontece.

Primeiro, execute a divisão inteira , que é semelhante à divisão normal, exceto que qualquer número fracionário (também conhecido como resto) é descartado:

16 / 6 = 2

Em seguida, multiplique o resultado da divisão acima ( 2) pelo nosso divisor ( 6):

2 * 6 = 12

Finalmente, subtraia o resultado da multiplicação acima ( 12) do nosso dividendo ( 16):

16 - 12 = 4

O resultado desta subtração,, 4o resto , é o mesmo resultado do nosso módulo acima!

Marcin M. Jessa
fonte
1
Como você consegue 2 de 16/6 e não 2.6666666667? Você deve sempre ignorar o 0, ...? Por quê?
Luc
3
@Luc Como Leo e ytpillai mencionam, estamos usando divisão inteira (onde a parte fracionária do resultado após a divisão é descartada). Em Python 3: 16 // 6 >>> 2e16 / 6 >>> 2.6666666666666665
bryik
30

Talvez o exemplo com um relógio possa ajudá-lo a entender o módulo.

Um uso familiar da aritmética modular é seu uso no relógio de 12 horas, no qual o dia é dividido em dois períodos de 12 horas.

Digamos que atualmente temos este horário: 15:00
Mas você também poderia dizer que são 15:00

Isso é exatamente o que o módulo faz:

15 / 12 = 1, remainder 3

Você encontra este exemplo melhor explicado na Wikipedia: Artigo do Módulo da Wikipedia

Prine
fonte
29

A fórmula simples para calcular o módulo é: -

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

Então, 27% 16: -

27- {(27/16) * 16}

27- {1 * 16}

Resposta = 11

Nota :

Todos os cálculos são com números inteiros. No caso de um quociente decimal, a parte após o decimal deve ser ignorada / truncada.

por exemplo: 27/16 = 1,6875 deve ser considerado apenas como 1 na fórmula mencionada acima. 0,6875 é ignorado.

Compiladores de linguagens de computador tratam um inteiro com parte decimal da mesma maneira (truncando após o decimal) também

Code_Jamer
fonte
Que tal 3% 7?
eaglei22
Então seriam apenas 3?
eaglei22
15

O operador de módulo pega uma declaração de divisão e retorna o que sobrou desse cálculo, os dados "restantes", por assim dizer, como 13/5 = 2. O que significa que há 3 sobrando ou remanescentes desse cálculo. Por quê? porque 2 * 5 = 10. Assim, 13 - 10 = 3.

O operador de módulo faz todos os cálculos para você, 13% 5 = 3.

RebelPhoenix
fonte
Acho que essa resposta explica melhor do ponto de vista conceitual. Outras respostas explicam matematicamente o que também é necessário, mas isso me ajuda melhor a entender como eu poderia aplicar o operador de módulo.
JonnyB
7

a divisão do módulo é simplesmente isto: divida dois números e retorne apenas o resto

27/16 = 1 com 11 restantes, portanto 27% 16 = 11

idem 43/16 = 2 com 11 sobrando, então 43% 16 = 11 também

chris
fonte
6

Muito simples: a % bé definido como o restante da divisão de apor b.

Veja o artigo da Wikipedia para mais exemplos.

Yuval Adam
fonte
5

Eu gostaria de acrescentar mais uma coisa:

é fácil calcular o módulo quando o dividendo é maior / maior que o divisor

dividendo = 5 divisor = 3

5% 3 = 2

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

mas e se o divisor for menor que o dividendo

dividendo = 3 divisor = 5

3% 5 = 3 ?? como

Isso ocorre porque, uma vez que 5 não pode dividir 3 diretamente, o módulo será o que o dividendo é

bn00d
fonte
3

Espero que essas etapas simples ajudem:

20 % 3 = 2 
  1. 20 / 3 = 6; não inclua .6667- apenas ignore
  2. 3 * 6 = 18
  3. 20 - 18 = 2, que é o restante do módulo
mustafe
fonte
Você poderia formatar esta resposta um pouco melhor?
Código Maverick de
Verifique a resposta do Code Jammer.
Ajmal Salim
2

Mais fácil quando o seu número após o decimal (0.xxx) é curto. Então tudo que você precisa fazer é multiplicar esse número pelo número após a divisão.

Ex: 32 % 12 = 8

Você faz 32/12=2.666666667 Então você joga tudo 2fora e se concentra no0.666666667 0.666666667*12=8 <- Essa é a sua resposta.

(novamente, só é fácil quando o número após o decimal é curto)

Gc220
fonte
1

A divisão do módulo fornece o restante de uma divisão, ao invés do quociente.

Samoz
fonte
1

Digamos que você tenha 17 mod 6.

o total de 6 vai te levar o mais próximo de 17, será 12 porque se você passar de 12 você terá 18, que é mais do que a questão de 17 mod 6. Você então pegará 12 e menos de 17, o que lhe dará sua resposta, neste caso 5.

17 mod 6 = 5

Chad Finch
fonte
1

A divisão do módulo é bastante simples. Ele usa o resto em vez do quociente.

    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, logo 13% 12 = 1.


Isso ajuda a pensar no módulo como um "ciclo".

Em outras palavras, para a expressão n % 12, o resultado será sempre <12.

Isso significa que a sequência do conjunto 0..100para 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}

Sob essa luz, o módulo, bem como seus usos, tornam-se muito mais claros.

Braden Best
fonte
1

A única coisa importante a entender é que o módulo (denotado aqui por% como em C) é definido através da divisão euclidiana .

Para quaisquer dois (d, q) inteiros, o seguinte é sempre verdadeiro :

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

Como você pode ver, o valor de d%q depende do valor de d/q . Geralmente, para inteiros positivos d/qé truncado em direção a zero , por exemplo 5/2 dá 2, portanto:

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

Porém, para números inteiros negativos a situação é menos clara e depende do idioma e / ou do padrão. Por exemplo, -5/2 pode retornar -2 (truncado para zero como antes), mas também pode retornar -3 (com outro idioma).

No primeiro caso:

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

mas no segundo:

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

Como disse antes, basta lembrar o invariante , que é o divisão euclidiana .

Detalhes adicionais:

Picaud Vincent
fonte
1
Surpreendentemente útil em relação à paginação.
Bob Jordan
1

27% 16 = 11

Você pode interpretar desta forma:

16 vai 1 vez em 27 antes de passar.

16 * 2 = 32.

Então, você poderia dizer que 16 vai uma vez em 27 com o restante de 11.

De fato,

16 + 11 = 27

Outro exemplo:

20% 3 = 2

O poço 3 passa 6 vezes em 20 antes de passar.

3 * 6 = 18

Para somar 20, precisamos de 2, de modo que o restante da expressão do módulo seja 2.

William
fonte
0

É simples, o operador Modulus (%) retorna o resto após a divisão inteira. Vamos dar o exemplo da sua pergunta. Como 27% 16 = 11? Quando você simplesmente divide 27 por 16, ou seja, (27/16), o restante é 11, e é por isso que sua resposta é 11.

Shiraz Shrestha
fonte
0

Escreva uma tabela começando com 0.

{0,1,2,3,4}

Continue a tabela em linhas.

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

Tudo na coluna um é um múltiplo de 5. Tudo na coluna 2 é um múltiplo de 5 com 1 como resto. Agora a parte abstrata: você pode escrever (1) como 1/5 ou como uma expansão decimal. O operador de módulo retorna apenas a coluna ou, de outra forma, retorna o resto na divisão longa. Você está lidando com o módulo (5). Módulo diferente, mesa diferente. Pense em uma tabela de hash.

Terrence McLaughlin
fonte
0

Quando dividimos dois inteiros, teremos uma equação semelhante a esta:

A / B = Q resto R

A é o dividendo; B é o divisor; Q é o quociente e R é o resto

Às vezes, só estamos interessados ​​em saber qual é o resto quando dividimos A por B. Para esses casos, há um operador chamado operador de módulo (abreviado como mod).

Exemplos

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.

Consulte o artigo da Khan Academy para obter mais informações.

Na ciência da computação, a tabela Hash usa o operador Mod para armazenar o elemento onde A serão os valores após o hashing, B será o tamanho da tabela e R é o número de slots ou chave onde o elemento é inserido.

Veja Como funciona uma tabela hash para mais informações

Yogendra Paudyal
fonte
-1

Esta foi a melhor abordagem para entender o operador de módulo. Vou apenas explicar a você por meio de exemplos.

16 % 3

Quando você divide esses dois números, o resto é o resultado. É assim que eu faço.

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

Então o que resta para 16 é 1

16 % 3 = 1

Aqui está mais um exemplo: o 16 % 7 = 7 + 7 = 14que resta para 16? É2 16 % 7 = 2

Mais uma: 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . Então, o resto é zero,24 % 6 = 0

Nemus
fonte