모듈러 연산

엄밀한 정의는 더 복잡하지만, 정수의 모듈러 연산 $A \bmod B$는 대충 이렇게 정의할 수 있습니다.

$$ A \bmod B = sgn(B) \times \left\lparen A - \left\lparen \left\lfloor \frac{A}{\left\lbrack B \right\rbrack} \right\rfloor \times \left\lbrack B \right\rbrack \right\rparen \right\rparen $$

$B = 2$ $B = 3$ $B = -2$ $B = -3$
$A = 4$ 0 1 0 -1
$A = 3$ 1 0 -1 0
$A = 2$ 0 2 0 -2
$A = 1$ 1 1 -1 -1
$A = 0$ 0 0 0 0
$A = -1$ 1 2 -1 -2
$A = -2$ 0 1 0 -1
$A = -3$ 1 0 -1 0

양수의 모듈러 연산은 C의 signed integer가 표현 범위를 벗어날 때의 동작과 같습니다.

나머지 연산

나머지 연산은 말 그대로 나머지 연산을 말합니다. 여기서 $A // B$는 나눗셈의 몫 A / B입니다.

$$ A // B = sgn(AB) \times \left\lfloor \left\lbrack \dfrac{A}B \right\rbrack \right\rfloor \newline A \mathbin{\%} B = A - \left\lparen A // B \right\rparen \times B $$

$B = 2$ $B = 3$ $B = 2$ $B = -2$
$A = 4$ 0 1 0 1
$A = 3$ 1 0 1 0
$A = 2$ 0 2 0 2
$A = 1$ 1 1 1 1
$A = 0$ 0 0 0 0
$A = -1$ -1 -1 -1 -1
$A = -2$ 0 -2 0 -2
$A = -3$ -1 0 -1 0

차이

A와 B가 모두 양수일 때는 모듈러와 나머지가 같지만. 그 외의 경우에는 결과가 다릅니다.

A가 음수일 때도 $\left\lparen A + 1 \right\rparen \bmod B$는 $\left\lparen A \bmod B \right\rparen + 1$ 또는 $0$이 됩니다.

B가 음수일 때 $A \bmod B$는 $-\left\lparen A \bmod -B \right\rparen$와 같습니다.

A가 음수일 때 $A \mathbin{\%} B$는 $-\left\lparen -A \mathbin{\%} B \right\rparen$와 같습니다.

B가 음수일 때 $A \mathbin{\%} B$는 $A \mathbin{\%} -B$와 같습니다.

같이 보기

int의 오버플로우가 위험한 이유 - unsigned int의 동작을 잠깐 다룹니다.