Given a number n, write a function that returns true if n is divisible by 9, else false. The most simple way to check for n’s divisibility by 9 is to do n%9.
Another method is to sum the digits of n. If sum of digits is multiple of 9, then n is multiple of 9.
The above methods are not bitwise operators based methods and require use of % and /.
The bitwise operators are generally faster than modulo and division operators. Following is a bitwise operator based method to check divisibility by 9.
C++
#include <bits/stdc++.h>
using namespace std;
bool isDivBy9( int n)
{
if (n == 0 || n == 9)
return true ;
if (n < 9)
return false ;
return isDivBy9(( int )(n >> 3) - ( int )(n & 7));
}
int main()
{
for ( int i = 0; i < 100; i++)
if (isDivBy9(i))
cout << i << " " ;
return 0;
}
|
Java
import java.lang.*;
class GFG {
static boolean isDivBy9( int n)
{
if (n == 0 || n == 9 )
return true ;
if (n < 9 )
return false ;
return isDivBy9(( int )(n >> 3 ) - ( int )(n & 7 ));
}
public static void main(String arg[])
{
for ( int i = 0 ; i < 100 ; i++)
if (isDivBy9(i))
System.out.print(i + " " );
}
}
|
Python3
def isDivBy9(n):
if (n = = 0 or n = = 9 ):
return True
if (n < 9 ):
return False
return isDivBy9(( int )(n>> 3 ) - ( int )(n& 7 ))
for i in range ( 100 ):
if (isDivBy9(i)):
print (i, " " , end = "")
|
C#
using System;
class GFG {
static bool isDivBy9( int n)
{
if (n == 0 || n == 9)
return true ;
if (n < 9)
return false ;
return isDivBy9(( int )(n >> 3) - ( int )(n & 7));
}
public static void Main()
{
for ( int i = 0; i < 100; i++)
if (isDivBy9(i))
Console.Write(i + " " );
}
}
|
PHP
<?php
function isDivBy9( $n )
{
if ( $n == 0 || $n == 9)
return true;
if ( $n < 9)
return false;
return isDivBy9(( $n >> 3) -
( $n & 7));
}
for ( $i = 0; $i < 100; $i ++)
if (isDivBy9( $i ))
echo $i , " " ;
?>
|
Javascript
<script>
function isDivBy9(n)
{
if (n == 0 || n == 9)
return true ;
if (n < 9)
return false ;
return isDivBy9(parseInt(n >> 3) - parseInt(n & 7));
}
for (i = 0; i < 100; i++)
if (isDivBy9(i))
document.write(i + " " );
</script>
|
Output:
0 9 18 27 36 45 54 63 72 81 90 99
Time Complexity: O(log n)
Auxiliary Space: O(logn)
How does this work?
n/9 can be written in terms of n/8 using the following simple formula.
n/9 = n/8 - n/72
Since we need to use bitwise operators, we get the value of floor(n/8) using n>>3 and get value of n%8 using n&7. We need to write above expression in terms of floor(n/8) and n%8.
n/8 is equal to “floor(n/8) + (n%8)/8”. Let us write the above expression in terms of floor(n/8) and n%8
n/9 = floor(n/8) + (n%8)/8 - [floor(n/8) + (n%8)/8]/9
n/9 = floor(n/8) - [floor(n/8) - 9(n%8)/8 + (n%8)/8]/9
n/9 = floor(n/8) - [floor(n/8) - n%8]/9
From above equation, n is a multiple of 9 only if the expression floor(n/8) – [floor(n/8) – n%8]/9 is an integer. This expression can only be an integer if the sub-expression [floor(n/8) – n%8]/9 is an integer. The subexpression can only be an integer if [floor(n/8) – n%8] is a multiple of 9. So the problem reduces to a smaller value which can be written in terms of bitwise operators.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!