프로그래밍 언어에 따라 음수 모듈러 연산을 처리하는 방식이 다릅니다. 언어마다 방식이 다르기 때문에 혼동이 생기므로 혼란을 피하기 위해 차이를 알아야 합니다. 자주 사용하는 언어는 c언어의 방식과 파이썬의 방식이 있으므로 두 언어의 따라 차이점을 설명하고 예제를 통해 간단한 계산하는 방식을 알아보겠습니다.
1. 파이썬 기준
프로그래밍 언어는 파이썬 기준입니다.(설명을 위한 계산기는 윈도우 공학용 계산기입니다)
파이썬은 나머지 연산 시 몫에 대해 내림 처리(Floored)를 하기 때문에 아래와 같은 결과가 나오게 됩니다.
나머지는 두 정수의 나눗셈 이후 딱 떨어지지 않은 남은 값입니다.
a = q X d + r
0 <= r < d이면 r은 나머지이고 q는 몫입니다.
-5를 3으로 나머지 연산을 하면 값이 얼마일까요?
1이 됩니다.
-5 = 3 x (-2) + (1)
몫을 음수(-2)로 처리하기 때문에 나머지는 1이 나오게 됩니다.
*5 % 3으로 생각하면 값이 2인데 3에서 2를 빼주면 원하는 값이 나오게 됩니다.
과정
5 % 3 = 2
3 - 2 = 1
비슷한 과정입니다. 1 % 10000이라고 생각하고 계산하면 값은 1이 나오게 되고 음수 모듈러 연산이라는 것을 기억하고 10000에서 1을 빼줍니다.
정리
1. 음수를 나머지 연산해줄때
-a % b = ??
1. 양수라고 생각하고 a % b을 수행한다.
2. a % b = c라 하면
3. b에서 c값을 빼준다.
2. 음수로 나머지 연산을 해줄 때
a % -b = ??
1. 양수라고 생각하고 a % b을 수행한다.
2. a % b = c라 하면
3. b에 c값을 더해준다.
3. a와 b 모두 음수일 때
-a % -b = ??
1. 양수라고 생각하고 a % b를 수행한다.
2. a % b = c라 하면
3. c에 마이너스 부호를 붙여준다.
즉. 양수로 바꾸고 나온 값(c)을 b에 더하거나 빼줘야 하는데 b가 음수이면(마이너스 부호가 붙어있으면) 또 빼주지 말고 더해주고 b가 양수이면 마이너스 부호가 없으니까 빼준다고 생각하면 됩니다.
만일 a와 b 모두 음수인 경우일 때는 a와 b가 양수로 바꾸고 나온 값(c)에 마이너스 부호를 붙이면 됩니다.
예제)
1.
5 % 3이라 생각하면 값은 2가 나오고
-3에 2를 더하면 -1이 나오게 됩니다.
2.
5 % 3이라고 생각하면 값은 2가 나오고
3에서 -2 해주면 1이 나오게 됩니다.
3.
5 % 3이라고 생각하면 값은 2가 나오고
그 값에 마이너스 부호를 붙여주면 -2가 나오게 됩니다.
4.
3 % 5라고 생각하면 값은 3이 나오고
-5에서 3을 더하면 -2가 나오게 됩니다.
5.
3 % 5라고 생각하면 값은 3이 나오고
5에서 -3 해주면 2가 나오게 됩니다.
6.
3 % 5라고 생각하면 값은 3이 나오고
3에 마이너스 부호를 붙이면 -3이 나오게 됩니다.
7.
4 % 3이라 생각하면 값은 1이 나오게 되고
-3에서 1을 더하면 -2가 나오게 됩니다.
8.
4 % 3이라 생각하면 값은 1이 나오게 되고
3에 -1 해주면 2가 나오게 됩니다.
9.
4 % 3이라 생각하면 값은 1이 나오게 되고
1에 마이너스 부호를 붙이면 -1이 나오게 됩니다.
10.
7 % 3이라고 생각하면 값은 1이 나오게 되고
-3에 1을 더해주면 -2가 나오게 됩니다.
11.
7 % 3이라고 생각하면 값은 1이 나오게 되고
3에 -1을 해주면 2가 나오게 됩니다.
12.
7 % 3이라고 생각하면 값은 1이 나오게 되고
1에 마이너스 부호를 붙이면 -1이 나오게 됩니다.
13.
2022는 지금 년도이고 175는 제 키입니다 ㅎㅎ
2022 % 175라고 생각하면 나머지는 97이 나오게 됩니다.
175에서 -97을 하면 78이 나오게 됩니다.
14.
2022 % 175라고 생각하면 나머지는 97이 나오게 되고
-175에 97을 더하면 -78이 나오게 됩니다.
15.
2022 % 175라고 생각하면 나머지는 97이 나오게 되고
97에 마이너스 부호를 붙이면 -97이 나오게 됩니다.
예제는 여기까지 쓰겠습니다. 규칙성이 보이시나요? -a % b와 a % -b의 결과는 서로 음수 대칭입니다. (1, -1), (78, -78)처럼 말이죠 ㅎㅎ
2. C언어 기준
프로그래밍 언어는 C언어 기준입니다.(설명을 위한 계산기는 윈도우 프로그래머 계산기입니다)
C언어는 나머지 연산 수행 시 몫에 대해 버림 처리(Truncated)를 하는 방식을 사용합니다.
정리
1. 음수를 나머지 연산해 줄 때
-a % b = ??
1. 양수라고 생각하고 a % b를 수행한다.
2. a % b = c라 하면
3. c에 마이너스 부호를 붙여준다.
2. 음수로 나머지 연산해 줄 때
a % -b = ??
1. 양수라고 생각하고 a % b를 수행한다.
2. a % b = c라 하면
3. c를 그대로 사용한다.
3. a와 b 모두 음수일 때
-a % -b = ??
1. 양수라고 생각하고 a % b를 수행한다.
2. a % b = c라 하면
3. c에 마이너스 부호를 붙여준다.
즉, 앞자리인 a를 기준으로 결괏값에 음수를 붙이게 됩니다. -a % b라면 -c가 되고 a % -b라면 c가 결괏값이 됩니다. 또한 두자리 모두 음수인 경우 -a % -b인 경우는 -c가 결과값이 됩니다.
위와 같이 예제를 이용하여 살펴보겠습니다.
예제)
1.
5 % 3이라고 생각하면 나머지는 2가 나오게 되고
앞자리(a)를 기준으로 하므로 2가 나오게 됩니다.
2.
5 % 3이라고 생각하면 나머지는 2가 나오게 되고
앞자리를 기준으로 하므로 마이너스 부호를 붙여 -2가 나오게 됩니다.
3.
5 % 3이라고 생각하면 나머지는 2가 나오게 되고
두 자리 모두 음수이므로 마이너스 부호를 붙여 -2가 나오게 됩니다.
4.
3 % 5라고 생각하면 나머지는 3이 나오게 되고
앞자리를 기준으로 하므로 3이 나오게 됩니다.
5.
3 % 5라고 생각하면 나머지는 3이 나오게 되고
앞자리를 기준으로 하므로 마이너스 부호를 붙여 -3이 나오게 됩니다.
6.
3 % 5라고 생각하면 나머지는 3이 나오게 되고
두 자리 모두 음수이므로 마이너스 부호를 붙여 -3이 나오게 됩니다.
7.
4 % 3이라고 생각하면 나머지는 1이 나오게 되고
앞자리를 기준으로 하므로 1이 나오게 됩니다.
8.
4 % 3이라고 생각하면 나머지는 1이 나오게 되고
앞자리를 기준으로 하므로 마이너스 부호를 붙혀 -1이 나오게 됩니다.
9.
4 % 3이라고 생각하면 나머지는 1이 나오게 되고
두자리 모두 음수이므로 마이너스 부호를 붙혀 -1이 나오게 됩니다.
10.
7 % 3이라고 생각하면 나머지는 1이 나오게 되고
앞자리를 기준으로 하므로 1이 나오게 된다.
11.
7 % 3이라고 생각하면 나머지는 1이 나오게 되고
앞자리를 기준으로 하므로 마이너스 부호를 붙여 -1이 나오게 된다.
12.
7 % 3이라고 생각하면 나머지는 1이 나오게 되고
두 자리 모두 음수이므로 마이너스 부호를 붙여 -1이 나오게 된다.
13.
2022 % 175라고 생각하면 나머지는 97이 나오게 되고
앞자리를 기준으로 하므로 97이 나오게 된다.
14.
2022 % 175라고 생각하면 나머지는 97이 나오게 되고
앞자리를 기준으로 하므로 마이너스 부호를 붙여 -97이 나오게 된다.
15.
2022 % 175라고 생각하면 나머지는 97이 나오게 되고
두 자리 모두 음수이므로 마이너스 부호를 붙혀 -97이 나오게 된다.
'[Computer Science] > [Math]' 카테고리의 다른 글
[Math] 완전수(perfect number)란? (0) | 2024.07.24 |
---|