Open In App

Check if a number is divisible by 17 using bitwise operators

Last Updated : 07 Jun, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given a number n, check if it is divisible by 17 using bitwise operators. 
Examples: 
 

Input : n = 34
Output : 34 is divisible by 17

Input :  n = 43
Output : 43 is not divisible by 17


 


A naive approach will be to check it by % operator if it leaves a remainder of 0.
To do division using Bitwise operators, we must rewrite the expression in powers of 2. 
 

n/17 = (16*n)/(17*16)
     = (17 - 1)*n/(17*16)
     = (n/16) - (n/(17*16))


We can rewrite n/16 as floor(n/16) + (n%16)/16 using general rule of division. 
 

n/17 = floor(n/16) + (n%16)/16 - 
       (floor(n/16) + (n%16)/16)/17
     = floor(n/16) - (floor(n/16) - 
            17*(n%16)/16 + (n%16)/16)/17
     = floor(n/16) - (floor(n/16)-n%16)/17


The left-hand-side of this equation is n/17. That will be an integer only when the right-hand-side is an integer. floor(n/16) is an integer by definition. So the whole left-hand-side would be an integer if (floor(n/16)-n%16)/17 is also an integer.
This implies n is divisible by 17 if (floor(n/16)-n%16) is divisible by 17.
(floor(n/16)-n%16) can be written in bitwise as (int)(n>>4) - (int)(n&15) where n>>4 means n/16 and n&15 means n%16 
Below is the implementation of the above approach: 
 

CPP
Java Python3 C# PHP JavaScript

Output: 

35 is not divisible by 17


 Time Complexity: O(log16N), as we are using recursion and in each call we are decrementing by division of 16.

Auxiliary Space: O(1), as we are not using any extra space.


Next Article
Article Tags :
Practice Tags :

Similar Reads