![]() |
VOOZH | about |
Given a number n. The problem is to efficiently check whether n is a multiple of 4 or not without using arithmetic operators.
Examples:
Input : 16 Output : Yes Input : 14 Output : No
Approach: A multiple of 4 always has 00 as its last two digits in its binary representation. We have to check whether the last two digits of n are unset or not.
How to check whether the last two bits are unset or not.
If n & 3 == 0, then the last two bits are unset, else either both or one of them are set.
Output:
Yes
Time Complexity : O(1)
Auxiliary Space: O(1)
Can we generalize above solution?
Similarly we can check for other powers of 2. For example, a number n would be multiple of 8 if n & 7 is 0. In general we can say.
// x must be a power of 2 for below // logic to work if (n & (x -1) == 0) n is a multiple of x Else n is NOT a multiple of x