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.
// C++ implementation to efficiently check whether n // is a multiple of 4 or not #include <bits/stdc++.h> using namespace std;
// function to check whether 'n' is // a multiple of 4 or not string isAMultipleOf4( int n)
{ // if true, then 'n' is a multiple of 4
if ((n & 3) == 0)
return "Yes" ;
// else 'n' is not a multiple of 4
return "No" ;
} // Driver program to test above int main()
{ int n = 16;
cout << isAMultipleOf4(n);
return 0;
} |
// Java implementation to efficiently check // whether n is a multiple of 4 or not class GFG {
// method to check whether 'n' is
// a multiple of 4 or not
static boolean isAMultipleOf4( int n)
{
// if true, then 'n' is a multiple of 4
if ((n & 3 ) == 0 )
return true ;
// else 'n' is not a multiple of 4
return false ;
}
// Driver method
public static void main(String[] args)
{
int n = 16 ;
System.out.println(isAMultipleOf4(n) ? "Yes" : "No" );
}
} |
# Python 3 implementation to # efficiently check whether n # is a multiple of 4 or not # function to check whether 'n' # is a multiple of 4 or not def isAMultipleOf4(n):
# if true, then 'n' is
# a multiple of 4
if ((n & 3 ) = = 0 ):
return "Yes"
# else 'n' is not a
# multiple of 4
return "No"
# Driver Code if __name__ = = "__main__" :
n = 16
print (isAMultipleOf4(n))
# This code is contributed # by ChitraNayal |
// C# implementation to efficiently check // whether n is a multiple of 4 or not using System;
class GFG {
// method to check whether 'n' is
// a multiple of 4 or not
static bool isAMultipleOf4( int n)
{
// if true, then 'n' is a multiple of 4
if ((n & 3) == 0)
return true ;
// else 'n' is not a multiple of 4
return false ;
}
// Driver method
public static void Main()
{
int n = 16;
Console.WriteLine(isAMultipleOf4(n) ? "Yes" : "No" );
}
} // This code is contributed by vt_m. |
<?php // PHP implementation to // efficiently check whether n // is a multiple of 4 or not // function to check whether 'n' is // a multiple of 4 or not function isAMultipleOf4( $n )
{ // if true, then 'n'
// is a multiple of 4
if (( $n & 3) == 0)
return "Yes" ;
// else 'n' is not
// a multiple of 4
return "No" ;
} // Driver Code
$n = 16;
echo isAMultipleOf4( $n );
// This code is contributed by anuj_67. ?> |
<script> // Javascript implementation to efficiently check // whether n is a multiple of 4 or not // method to check whether 'n' is
// a multiple of 4 or not
function isAMultipleOf4(n)
{
// if true, then 'n' is a multiple of 4
if ((n & 3) == 0)
return true ;
// else 'n' is not a multiple of 4
return false ;
}
// Driver method
let n = 16;
document.write(isAMultipleOf4(n) ? "Yes" : "No" );
//This code is contributed by rag2127
</script> |
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