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.



My Personal Notes arrow_drop_up

Improved By : vt_m



Article Tags :
Practice Tags :


1


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