C언어와 파이썬(Python)의 양수,음수 모듈러 연산(Modulo operation)

C,Python 양수의 모듈러 연산의 예시

18 mod 8 = (18 = 8 x 2 + 3)  ∴ 3
위의 문제로 예를 들어 보면 18을 8로 나누면 목은 2가 나오게 되고 나머지로는 3이 나오게 됩니다
목을 제외한 나머지부분에 해당하는 3이 모듈러 연산의 결과입니다
 
5 mod 13 =  (5 = 13 x 0 + 5∴ 5
5를 13으로 나눌경우에는 목은 0이 되고 나머지는 5가 됩니다
즉 나머지에 해당하는 5가 모듈러연산의 결과입니다
 
파이썬과 c언어 모두 동일한 결과값을 같는 걸 확인할 수 있습니다
 
 
 

C언어 음수의 모듈러 연산

음수의 경우에도 모듈러 연산이 가능하지만 음수의 나눗셈은 명확히 정의되어 있지 않기에 설계된 언어에 따라 다른 결과가 나올 수도 있습니다 다만 이 연산 결과는 수학적 정의는 만족하므로 틀린 값은 아닙니다
 
 
C언어의 모듈러 연산에서 음수는 x % y연산을 수행할때 연산의 결과는 x의 부호를 따라갑니다 즉 x의 부호에 따라 결과의 부호가 따라갑니다
 
C언어 모듈러 연산의 부호

X % -Y = Z  || -X % Y = -Z

7 % -4 = 7 - 4 = 3  || -7 % 4 =  -3

 
연산의 예시
연산할때 -를 +라고 생각하고 계산하면 쉽습니다

-27 % 4 = [4 x 6 = 24]+ 3  ∴ -3

위의 식을보면 -27을 양수 27로 생각하고 27 % 4는 목은 6이며 나머지 3이 남게 됩니다 mod연산에서 구하고자 하는 값은 나머지이기 때문에 나머지 3에다가 c언어의 모듈러 연산 정의에 의해 부호는 X위치(-27)에 해당하는 -를 가져와줍니다
 
 
이번에는 -5 mod 4 를 C언어로 연산하면 어떻게 될까요?

-5 % 4 = [4 x 1] + 1(나머지) = -1(x(-5)의 부호를 가져옴)  ∴ -1

-5를 양수로 생각하고 5 % 4를 할 경우 나머지는 1이 되고 맨 앞의 부호 -를 가져와서 -1이라는 결과가 나오게 됩니다
 
 

파이썬 음수의 모듈러 연산

똑같이 위의 -5 mod 4를 파이썬에서 수행하게 되면 C언어와 다르게 3이라는 결과가 나오게 됩니다
 
파이썬에서 음수의 모듈러 연산 방식은 C언어와 조금 다른데 나머지값이 음수일경우 x mod y 일때 y번만큼 한번 더 더해서 양수로 만들어주면 됩니다
즉 결과가 0 또는 양수로 나오게 됩니다

-5 % 4 = -5+4 = 1(몫), ※-1(나머지) = -1 #결과가 음수이기 때문에
#x mod y 에서 y에 해당하는 4만큼 한번더 더해줌

-1 + 4 = 3

∴ 3

과정을 설명드리자면 -5에(x) 4(y)만큼 더해줍니다 
나머지 값이 -1 아직 음수가 나오기 때문에 양수가 될 때까지 반복해줍니다
-1에서 또 4(y)만큼 더해줬더니 3이라는 양수의 결과가 나옵니다 
음수의 모듈러 연산에 있어서 파이썬에서는 이 양수의 결과가 출력됩니다 
 
예시

-50 % 3
= -50 + 3 = -47
= -50 + 3 = -44
.
.
.
= -50 + 3 = -2  # x(-50)이 양수가 되도록 y(3)을 계속 대입시킴 3 x 16


= -50 + 48 = -2  #-50하고 3x16 = 48을 빼면 -2가 남게됨 결과가 양수가 되기위해 한번더 3을 더해줌
= -2 + 3 = 1

∴ 1

 
 
 
파이썬 예제

-8 % 3 = -8 + 3 = -5
-5 + 3 = -2 (양수가 되기위해 한번더 반복함)
-2 + 3 = 1

-8 % 3 을할떄 3x2 = 6 나머지 -2가 나오게 됩니다 
이 결과에서 양수가 나올수 있도록 -2에다가 y에 해당하는 나누는수 3을 한번더 더해줍니다 -2 + 3
결과값 1이 나오게 됩니다
 
 
C언어 예제

-8 % 3 = -8 + 3 = -5
-5 + 3 = -2

-8 %3을 수행하면 8을 3으로 나누기위해 3x2 = 6 .. 나머지 -2가 나오게 됩니다
부호는 x에 해당하는 -를 가져와서 -2의 연산의 결과가 나옵니다
 
 
 

Top