Check if a number is divisible by 17 using bitwise operators
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
#include <bits/stdc++.h>
using namespace std;
bool isDivisibleby17( int n)
{
if (n == 0 || n == 17)
return true ;
if (n < 17)
return false ;
return isDivisibleby17(( int )(n >> 4) - ( int )(n & 15));
}
int main()
{
int n = 35;
if (isDivisibleby17(n))
cout << n << " is divisible by 17" ;
else
cout << n << " is not divisible by 17" ;
return 0;
}
|
Java
class GFG{
static boolean isDivisibleby17( int n)
{
if (n == 0 || n == 17 )
return true ;
if (n < 17 )
return false ;
return isDivisibleby17(( int )(n >> 4 )
- ( int )(n & 15 ));
}
public static void main(String[] args)
{
int n = 35 ;
if (isDivisibleby17(n) == true )
System.out.printf
( "%d is divisible by 17" ,n);
else
System.out.printf
( "%d is not divisible by 17" ,n);
}
}
|
Python3
def isDivisibleby17(n):
if (n = = 0 or n = = 17 ):
return True
if (n < 17 ):
return False
return isDivisibleby17(( int )(n >> 4 ) - ( int )(n & 15 ))
n = 35
if (isDivisibleby17(n)):
print (n, "is divisible by 17" )
else :
print (n, "is not divisible by 17" )
|
C#
using System;
class GFG
{
static bool isDivisibleby17( int n)
{
if (n == 0 || n == 17)
return true ;
if (n < 17)
return false ;
return isDivisibleby17(( int )(n >> 4)
- ( int )(n & 15));
}
public static void Main()
{
int n = 35;
if (isDivisibleby17(n) == true )
Console.WriteLine
(n + "is divisible by 17" );
else
Console.WriteLine
( n+ " is not divisible by 17" );
}
}
|
PHP
<?php
function isDivisibleby17( $n )
{
if ( $n == 0 || $n == 17)
return true;
if ( $n < 17)
return false;
return isDivisibleby17((int)( $n >> 4) -
(int)( $n & 15));
}
$n = 35;
if (isDivisibleby17( $n ))
echo $n . " is divisible by 17" ;
else
echo $n . " is not divisible by 17" ;
?>
|
Javascript
<script>
function isDivisibleby17(n)
{
if (n == 0 || n == 17)
return true ;
if (n < 17)
return false ;
return isDivisibleby17(Math.floor(n >> 4) - Math.floor(n & 15));
}
let n = 35;
if (isDivisibleby17(n))
document.write(n + " is divisible by 17" );
else
document.write(n + " is not divisible by 17" );
</script>
|
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.
Last Updated :
07 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...