Compute n modulo d without division(/) and modulo(%) operators, where d is a power of 2 number.
Let ith bit from right is set in d. For getting n modulus d, we just need to return 0 to i-1 (from right) bits of n as they are and other bits as 0.
For example if n = 6 (00..110) and d = 4(00..100). Last set bit in d is at position 3 (from right side). So we need to return last two bits of n as they are and other bits as 0, i.e., 00..010.
Now doing it is so easy, guess it….
Yes, you have guessing it right. See the below program.
C++
#include<stdio.h> // This function will return n % d. // d must be one of: 1, 2, 4, 8, 16, 32, … unsigned int getModulo(unsigned int n, unsigned int d) { return ( n & (d - 1) ); } // Driver Code int main() { unsigned int n = 6; // d must be a power of 2 unsigned int d = 4; printf ( "%u moduo %u is %u" , n, d, getModulo(n, d)); getchar (); return 0; } |
Java
// Java code for Compute modulus division by // a power-of-2-number class GFG { // This function will return n % d. // d must be one of: 1, 2, 4, 8, 16, 32, static int getModulo( int n, int d) { return ( n & (d- 1 ) ); } // Driver Code public static void main(String[] args) { int n = 6 ; /*d must be a power of 2*/ int d = 4 ; System.out.println(n+ " moduo " + d + " is " + getModulo(n, d)); } } // This code is contributed // by Smitha Dinesh Semwal. |
Python3
# Python code to demonstrate # modulus division by power of 2 # This function will # return n % d. # d must be one of: # 1, 2, 4, 8, 16, 32, … def getModulo(n, d): return ( n & (d - 1 ) ) # Driver program to # test above function n = 6 #d must be a power of 2 d = 4 print (n, "moduo" ,d, "is" , getModulo(n, d)) # This code is contributed by # Smitha Dinesh Semwal |
C#
// C# code for Compute modulus // division by a power-of-2-number using System; class GFG { // This function will return n % d. // d must be one of: 1, 2, 4, 8, 16, 32, … static uint getModulo( uint n, uint d) { return ( n & (d-1) ); } // Driver code static public void Main () { uint n = 6; uint d = 4; /*d must be a power of 2*/ Console.WriteLine( n + " moduo " + d + " is " + getModulo(n, d)); } } // This code is contributed by vt_m. |
PHP
<?php // This function will return n % d. // d must be one of: 1, 2, 4, 8, 16, 32, … function getModulo( $n , $d ) { return ( $n & ( $d - 1) ); } // Driver Code $n = 6; // d must be a power of 2 $d = 4; echo $n , " moduo" , " " , $d , " is " , " " ,getModulo( $n , $d ); // This code is contributed by vt_m. ?> |
References:
http://graphics.stanford.edu/~seander/bithacks.html#ModulusDivisionEasy
Please write comments if you find any bug in the above program/algorithm or other ways to solve the same problem.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.