Modulus Divison은 어떻게 작동합니까?


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
이것을 잘못된 방식으로 받아들이지 마십시오.하지만 여러분의 예제는 모듈 식 분할로 무슨 일이 벌어지고 있는지 전혀 모르는 사람을 위해 아무것도 정리하지 않습니다. 나머지가 어디서 오는지 설명하는 매우 중요한 단계를 생략했습니다. 아래 Marcin M.의 답변은 프로세스를 더 잘 설명했습니다. 개념을 전혀 이해하지 못하는 분들을 위해 향후 답변에 더 자세히 설명해 주시기 바랍니다. 그래도 커뮤니티에 기여 해주셔서 감사합니다! 당신과 같은 사람들이 저를 도와주고 제 교육 여정에서 저를 계속 도와줍니다 :)
Soundfx4

그럼에도 불구하고, 모듈러스와 나머지는 같은 것이 아닙니다. 일부 언어에는 하나, 다른 하나, 둘 다 및 일부 정의되지 않은 언어가 있습니다.
Marquis of Lorne

156

대부분의 설명은 한 가지 중요한 단계를 놓치고 있습니다. 다른 예를 사용하여 공백을 메우겠습니다.

다음을 고려하면 :

Dividend: 16
Divisor: 6

계수 기능은 다음과 같습니다 :

16 % 6 = 4

이것이 왜 그런지 결정합시다.

먼저 정수 나누기를 수행 합니다 . 이는 분수 (일명 나머지)가 삭제된다는 점을 제외하면 일반 나눗셈과 유사합니다.

16 / 6 = 2

그런 다음 위의 나눗셈 ( ) 의 결과에 제수 ( )를 합니다 .26

2 * 6 = 12

마지막으로 배당금 ( ) 에서 위의 곱셈 ( ) 의 결과를 뺍니다 .1216

16 - 12 = 4

이 뺄셈의 결과는, 4나머지는 , 우리 같은 결과 계수 위!


1
2,6666666667이 아니라 16/6 중 2를 어떻게 얻습니까? 항상 0, ...을 무시해야합니까? 왜?

3
@Luc Leo와 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 2015 년

7

모듈러스 나눗셈은 간단합니다. 두 수를 나누고 나머지 만 반환합니다.

27/16 = 1 (11 개 남음), 따라서 27 % 16 = 11

마찬가지로 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 2014

Code Jammer의 답변을 확인하십시오.
Ajmal Salim

2

소수점 이하 숫자 (0.xxx)가 짧을 때 더 쉽습니다. 그런 다음 그 숫자에 나눗셈 뒤의 숫자를 곱하기 만하면됩니다.

전의: 32 % 12 = 8

당신이 할 32/12=2.666666667 그럼 당신은 던져 2멀리하고, 초점 0.666666667 0.666666667*12=8<- 그게 답입니다.

(다시 말하지만, 소수점 이하 숫자가 짧을 때만 쉬움)


1

계수 나눗셈은 몫이 아닌 나눗셈의 나머지를 제공합니다.


1

17 mod 6이 있다고 가정 해 보겠습니다.

총 6 개가 17에 가장 가까운 값을 가져 오면 12가 될 것입니다. 12를 넘으면 18 개가 17 mod 6의 질문보다 더 많기 때문입니다. 그러면 17에서 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/q0쪽으로 잘립니다. 예를 들어 5/2는 2를 제공하므로 다음과 같습니다.

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

그러나 음의 정수의 경우 상황이 덜 명확하고 언어 및 / 또는 표준에 따라 다릅니다. 예를 들어 -5/2는 -2 (이전과 같이 0으로 잘림)를 반환 할 수 있지만 -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은 통과하기 전에 27에 1 번 들어갑니다.

16 * 2 = 32.

따라서 16은 27에서 1 회, 나머지 11은된다고 말할 수 있습니다.

사실로,

16 + 11 = 27

다른 예 :

20 % 3 = 2

3 번은 통과하기 전에 6 번 20 번으로 나갑니다.

3 * 6 = 18

20을 더하려면 2가 필요하므로 나머지 모듈러스 표현식은 2입니다.


0

간단합니다. Modulus operator (%)는 정수 나눗셈 후 나머지를 반환합니다. 질문의 예를 들어 보겠습니다. 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}

1 열의 모든 것은 5의 배수입니다. 2 열의 모든 것은 5의 배수이며 나머지는 1입니다. 이제 추상 부분 : (1)을 1/5 또는 10 진수 확장으로 쓸 수 있습니다. 모듈러스 연산자는 열만 반환하거나 다른 방식으로 긴 나눗셈의 나머지를 반환합니다. 당신은 modulo (5)를 다루고 있습니다. 다른 계수, 다른 테이블. 해시 테이블을 생각해보십시오.


0

두 개의 정수를 나누면 다음과 같은 방정식이 생깁니다.

A / B = Q 나머지 R

A는 배당금입니다. 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.

자세한 내용은 Khan Academy 기사 를 참조하세요.

컴퓨터 과학에서 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 = 1416까지 남은 것은 무엇입니까? 이다2 16 % 7 = 2

하나 더 : 24 % 6 = 6 + 6 = 12; 12 + 6 = 18; 18 + 6 = 24 . 나머지는 0입니다.24 % 6 = 0

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.