Compute modulus division by a power-of-2-number

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



filter_none

edit
close

play_arrow

link
brightness_4
code

#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;
}     

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.




My Personal Notes arrow_drop_up

Improved By : vt_m

Article Tags :
Practice Tags :


3


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.