# Check if a number is divisible by 17 using bitwise operators

• Difficulty Level : Hard
• Last Updated : 07 Jun, 2022

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

 `// CPP program to check if a number is``// divisible by 17 or not using bitwise``// operator.``#include ``using` `namespace` `std;` `// function to check recursively if the``// number is divisible by 17 or not``bool` `isDivisibleby17(``int` `n)``{``    ``// if n=0 or n=17 then yes``    ``if` `(n == 0 || n == 17)``        ``return` `true``;` `    ``// if n is less than 17, not``    ``// divisible by 17``    ``if` `(n < 17)``        ``return` `false``;` `    ``// reducing the number by floor(n/16)``    ``// - n%16``    ``return` `isDivisibleby17((``int``)(n >> 4) - (``int``)(n & 15));``}` `// driver code to check the above function``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

 `// Java program to check if a number is``// divisible by 17 or not using bitwise``// operator.``class` `GFG{``    ` `    ``// function to check recursively if the``    ``// number is divisible by 17 or not``    ``static` `boolean` `isDivisibleby17(``int` `n)``    ``{``        ` `        ``// if n=0 or n=17 then yes``        ``if` `(n == ``0` `|| n == ``17``)``            ``return` `true``;``    ` `        ``// if n is less than 17, not``        ``// divisible by 17``        ``if` `(n < ``17``)``            ``return` `false``;``    ` `        ``// reducing the number by``        ``// floor(n/16) - n%16``        ``return` `isDivisibleby17((``int``)(n >> ``4``)``                            ``- (``int``)(n & ``15``));``    ``}``    ` `    ``// driver function``    ``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);``    ``}``}` `// This code is contributed by``// Smitha Dinesh Semwal`

## Python3

 `# Python 3 program to``# check if a number is``# divisible by 17 or``# not using bitwise``# operator.` `# function to check recursively if the``# number is divisible by 17 or not``def` `isDivisibleby17(n):` `    ``# if n=0 or n=17 then yes``    ``if` `(n ``=``=` `0` `or` `n ``=``=` `17``):``        ``return` `True` `    ``# if n is less than 17, not``    ``# divisible by 17``    ``if` `(n < ``17``):``        ``return` `False` `    ``# reducing the number by floor(n/16)``    ``# - n%16``    ``return` `isDivisibleby17((``int``)(n >> ``4``) ``-` `(``int``)(n & ``15``))`  `# driver code to check the above function``n ``=` `35``if` `(isDivisibleby17(n)):``    ``print``(n,``"is divisible by 17"``)``else``:``    ``print``(n,``"is not divisible by 17"``)` `# This code is contributed by``# Smitha Dinesh Semwal`

## C#

 `// C# program to check if a number is``// divisible by 17 or not using bitwise``// operator.``using` `System;` `class` `GFG``{``    ` `    ``// function to check recursively if the``    ``// number is divisible by 17 or not``    ``static` `bool` `isDivisibleby17(``int` `n)``    ``{``        ` `        ``// if n=0 or n=17 then yes``        ``if` `(n == 0 || n == 17)``            ``return` `true``;``    ` `        ``// if n is less than 17, not``        ``// divisible by 17``        ``if` `(n < 17)``            ``return` `false``;``    ` `        ``// reducing the number by``        ``// floor(n/16) - n%16``        ``return` `isDivisibleby17((``int``)(n >> 4)``                            ``- (``int``)(n & 15));``    ``}``    ` `    ``// Driver function``    ``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"``);``    ``}``}` `// This code is contributed by``// vt_m`

## PHP

 `> 4) -``                            ``(int)(``\$n` `& 15));``}` `    ``// Driver Code``    ``\$n` `= 35;``    ``if` `(isDivisibleby17(``\$n``))``        ``echo` `\$n``.``" is divisible by 17"``;``    ``else``        ``echo` `\$n``.``" is not divisible by 17"``;` `// This code is contributed by mits``?>`

## 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.

My Personal Notes arrow_drop_up