Open In App

How to perform modulo with negative values in Python?

Improve
Improve
Like Article
Like
Save
Share
Report

Taking the modulo of a negative number is a bit more complex mathematics which is done behind the program of Python. If we don’t understand the mathematics behind the modulo of negative numbers then it will become a huge blunder.
 

Mathematics behind the negative modulo :

Let’s Consider an example, where we want to find the -5mod4 i.e. -5%4. You all must be wondering that the answer will be according to the below rule – 

-5/4 = 1.25 
and
math.floor(-1.25) = -2

But this is not the answer we get, when we’ll run the above code we’ll get the answer as 3. This is because Python’s modulo operator (%) always returns a number having the same sign as the denominator. What happens behind the scene is that Python applies the distribute law of Modulo operator which is – 

(a+b)mod n = [(a mod n)+(b mod n)]mod n

To apply this math Python break the given statement as – 

-5%4 = (-2*4 + 3) % 4 = 3

This was done so that the (-2*4)%4 will give the answer as 0 (as we are always getting a multiple of divisor as our first number) and the overall result will be 3. Let’s see more examples for better understanding.

Examples:

-3 % 7 = ( -1*7 + 4 ) % 7 = 4 
-5 % 2 = (-3*2 + 1) % 2 = 1

Example #1 : 
In this example, we can see that by using this mathematics, we are able to perform and understand the negative modulo.
 

Python3




# Using negative modulo
res1 = -5 % 4
res2 = ((-2*4) + 3) % 4
 
print(res1)
print(res2)


Output :

3
3

Example #2 :

Python3




# Using negative modulo
res1 = -3 % 7
res2 = - 12 % 4
 
print(res1)
print(res2)


Output :

4
0

Approach:

Import the math module at the beginning of your code. This module provides access to mathematical functions, including fmod().

Define the values of x and y that you want to perform modulo on. In this example, x is -10 and y is 3.

Call the math.fmod() function, passing in x and y as arguments. This function returns the remainder of dividing x by y, with the sign of x.

Print the result to the console to verify that the function worked correctly.

Python3




import math
 
x = -10
y = 3
 
result = math.fmod(x, y)
 
print(result)  # Output: -1.0


Output

-1.0

Time complexity:

The time complexity of the math.fmod() function is O(1), which means that it takes a constant amount of time to execute regardless of the size of the input values.
Space complexity:

The auxiliary space of the math.fmod() function is also O(1), as it only requires a small amount of memory to store the input values and the result.



Last Updated : 18 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads