Check if a number is multiple of 9 using bitwise operators

26 May, 2022
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++
Java
Python3
C#
PHP
Javascript
// C++ program to check if a number// is multiple of 9 using bitwise operators#include <bits/stdc++.h>using namespace std; // Bitwise operator based function to check divisibility by 9bool isDivBy9(int n){    // Base cases    if (n == 0 || n == 9)        return true;    if (n < 9)        return false;     // If n is greater than 9, then recur for [floor(n/9) - n%8]    return isDivBy9((int)(n >> 3) - (int)(n & 7));} // Driver program to test above functionint main(){    // Let us print all multiples of 9 from 0 to 100    // using above method    for (int i = 0; i < 100; i++)        if (isDivBy9(i))            cout << i << " ";    return 0;}
// Java program to check if a number// is multiple of 9 using bitwise operatorsimport java.lang.*; class GFG {     // Bitwise operator based function    // to check divisibility by 9    static boolean isDivBy9(int n)    {         // Base cases        if (n == 0 || n == 9)            return true;        if (n < 9)            return false;         // If n is greater than 9, then        // recur for [floor(n/9) - n%8]        return isDivBy9((int)(n >> 3) - (int)(n & 7));    }     // Driver code    public static void main(String arg[])    {         // Let us print all multiples of 9 from        // 0 to 100 using above method        for (int i = 0; i < 100; i++)            if (isDivBy9(i))                System.out.print(i + " ");    }} // This code is contributed by Anant Agarwal.
# Bitwise operator based# function to check divisibility by 9 def isDivBy9(n):     # Base cases    if (n == 0 or n == 9):        return True    if (n < 9):        return False      # If n is greater than 9,    # then recur for [floor(n / 9) - n % 8]    return isDivBy9((int)(n>>3) - (int)(n&7)) # Driver code # Let us print all multiples# of 9 from 0 to 100# using above methodfor i in range(100):    if (isDivBy9(i)):        print(i, " ", end ="") # This code is contributed# by Anant Agarwal.
// C# program to check if a number// is multiple of 9 using bitwise operatorsusing System; class GFG {     // Bitwise operator based function    // to check divisibility by 9    static bool isDivBy9(int n)    {        // Base cases        if (n == 0 || n == 9)            return true;        if (n < 9)            return false;         // If n is greater than 9, then        // recur for [floor(n/9) - n%8]        return isDivBy9((int)(n >> 3) - (int)(n & 7));    }     // Driver code    public static void Main()    {        // Let us print all multiples of 9 from        // 0 to 100 using above method        for (int i = 0; i < 100; i++)            if (isDivBy9(i))                Console.Write(i + " ");    }} // This code is contributed by nitin mittal.
<?php// PHP program to check if a number// is multiple of 9 using bitwise// operators // Bitwise operator based function// to check divisibility by 9function isDivBy9($n){         // Base cases    if ($n == 0 || $n == 9)        return true;    if ($n < 9)        return false;     // If n is greater than 9,    // then recur for [floor(n/9) -    // n%8]    return isDivBy9(($n >> 3) -                    ($n & 7));}     // Driver Code    // Let us print all multiples    // of 9 from 0 to 100    // using above method    for ($i = 0; $i < 100; $i++)        if (isDivBy9($i))            echo $i ," ";             // This code is contributed by nitin mittal?>
<script>// javascript program to check if a number// is multiple of 9 using bitwise operators // Bitwise operator based function// to check divisibility by 9function isDivBy9(n){     // Base cases    if (n == 0 || n == 9)        return true;    if (n < 9)        return false;     // If n is greater than 9, then    // recur for [floor(n/9) - n%8]    return isDivBy9(parseInt(n >> 3) - parseInt(n & 7));} // Driver code     // Let us print all multiples of 9 from// 0 to 100 using above methodfor (i = 0; i < 100; i++)    if (isDivBy9(i))        document.write(i + " "); // This code is contributed by Princi Singh</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 
nitin mittal
princi singh
ankita_saini
ranjanrohit840
divisibility
Bit Magic
Bit Magic
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Little and Big Endian Mystery
Program to find whether a given number is power of 2
Binary representation of a given number
Josephus problem | Set 1 (A O(n) Solution)
Divide two integers without using multiplication, division and mod operator
Bit Fields in C
Find the element that appears once
C++ bitset and its application
Add two numbers without using arithmetic operators
Cyclic Redundancy Check and Modulo-2 Division