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 |
-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.