수란 무엇인가? 수란 계산 가능한 모든 것을 말한다. 이때 어떤 계산이 가능한 지에 대해서 수의 종류가 달라진다. 그리고 컴퓨터 세계에서는 보통 정수와 실수가 다뤄진다. 내가 이 글에서 말하고 싶은 것은 특히 정수에 대한 것이다. 왜냐하면 정수를 어떻게 다루느냐에 따라서 문제에 접근하는 방식이 달라질 수 있기 때문이다.
어떤 정수 n에 대하여, 해당 수를 k로 나눌 때 몫을 m, 나머지를 n이라고 한다면, 아래와 같ㄷ이 n을 표현할 수 있다.
n = k * m + n ...( 0 <= n < k)
이때 여기서 중요한 점은 n이 k보다 작고 0보다는 같거나 크다는 것이다. 그리고 n은 정수라는 집합에 포함되어 있다는 사실이다. 따라서 어떤 정수 n에 대하여 위와 같은 표현이 항상 가능하기 때문에 모든 정수에 대하여 k를 기준으로 집합을 나눌 수 있다. (사실 너무나 당연해서 특별하다고 느껴지지 않는다.)
이때 k가 2라면, 모든 수를 짝수와 홀수로 나눠진다. 물론 너무나 당연한 사실이다. 그러나 때때로 이런 접근을 생각치 못해서 문제를 해결해 내지 못할 때가 있다.
정수는 항상 진법을 바꿔서 표현할 수 있다. 그러나 10진수에서는 유한한 숫자로 표현 가능했던 수가 2진수로 바꾼다면 무한한 숫자로 표현되는 경우가 있다. 따라서 표현은 가능하지만 컴퓨터 구조 내부에서 해당 진법 체계 간의 완벽한 호환이 이뤄지지 않을 수 있다는 가능성이 언제나 존재한다.
어떤 정수 n에 대한 명제가 존재하고 해당 명제를 이용해서 문제를 해결해야 할 때, 나눗셈 관점을 이용해봐도 좋다.
왜냐하면 어떤 정수 n에 대한 명제가 사용된다는 것은 모든 정수에 대해서 적용이 가능한 접근법이 필요하다는 뜻이다. 이런 경우에 모든 정수에 해당하는 정수 집합 자체를 잘 다루기 위해선 나눗셈 관점으로 접근하는 것이 좋다. 나눗셈 관점은 무한한 정수를 유한한 경우로 좁혀서 볼 수 있게 도와주기 때문이다.