Check whether bitwise AND of N numbers is Even or Odd
Last Updated :
27 Mar, 2023
Given an array arr[] containing N numbers. The task is to check whether the bitwise-AND of the given N numbers is even or odd.
Examples:
Input: arr[] = { 2, 12, 20, 36, 38 }
Output: Even
Input: arr[] = { 3, 9, 17, 13, 15 }
Output: Odd
A Simple Solution is to first find the AND of the given N numbers, then check if this AND is even or odd.
C++
#include <bits/stdc++.h>
using namespace std;
bool check( int arr[], int n)
{
int x=arr[0];
for ( int i=1;i<n;i++){
x=x & arr[i];
}
if (x%2==0)
return false ;
return true ;
}
int main()
{
int arr[] ={ 2, 12, 20, 36, 38};
int n = sizeof (arr) / sizeof (arr[0]);
if (check(arr, n))
cout << "Odd" ;
else
cout << "Even" ;
return 0;
}
|
Java
import java.util.*;
public class Main {
static boolean check( int arr[], int n)
{
int x = arr[ 0 ];
for ( int i = 1 ; i < n; i++) {
x = x & arr[i];
}
if (x % 2 == 0 )
return false ;
return true ;
}
public static void main(String[] args)
{
int arr[] = { 2 , 12 , 20 , 36 , 38 };
int n = arr.length;
if (check(arr, n))
System.out.println( "Odd" );
else
System.out.println( "Even" );
}
}
|
Python3
def check(arr, n):
x = arr[ 0 ]
for i in range ( 1 , n):
x = x & arr[i]
if x % 2 = = 0 :
return False
return True
if __name__ = = '__main__' :
arr = [ 2 , 12 , 20 , 36 , 38 ]
n = len (arr)
if check(arr, n):
print ( "Odd" )
else :
print ( "Even" )
|
Javascript
function check(arr, n) {
let x = arr[0];
for (let i = 1; i < n; i++) {
x = x & arr[i];
}
if (x % 2 == 0)
return false ;
return true ;
}
let arr = [2, 12, 20, 36, 38];
let n = arr.length;
if (check(arr, n))
console.log( "Odd" );
else
console.log( "Even" );
|
C#
using System;
public class Program
{
public static bool Check( int [] arr, int n)
{
int x = arr[0];
for ( int i = 1; i < n; i++)
{
x = x & arr[i];
}
if (x % 2 == 0)
return false ;
return true ;
}
public static void Main()
{
int [] arr = { 2, 12, 20, 36, 38 };
int n = arr.Length;
if (Check(arr, n))
Console.WriteLine( "Odd" );
else
Console.WriteLine( "Even" );
}
}
|
Time Complexity: O(N)
A Better Solution is based on bit manipulation and Mathematical facts.
- Bitwise AND of any two even numbers is an even number.
- Bitwise AND of any two odd numbers is an odd number.
- Bitwise AND of an even and an odd number is an even number.
Based on the above facts, it can be deduced that if at least one even number is present in the array then the bitwise AND of whole array will be even otherwise odd.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void checkEvenOdd( int arr[], int n)
{
for ( int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
cout << "Even" ;
return ;
}
}
cout << "Odd" ;
}
int main()
{
int arr[] = { 2, 12, 20, 36, 38 };
int n = sizeof (arr) / sizeof (arr[0]);
checkEvenOdd(arr, n);
return 0;
}
|
Java
import java.io.*;
class GFG {
static void checkEvenOdd( int [] arr, int n)
{
for ( int i = 0 ; i < n; i++) {
if (arr[i] % 2 == 0 ) {
System.out.print( "Even" );
return ;
}
}
System.out.println( "Odd" );
}
public static void main(String[] args)
{
int [] arr = { 2 , 12 , 20 , 36 , 38 };
int n = arr.length;
checkEvenOdd(arr, n);
}
}
|
Python3
def checkEvenOdd(arr, n):
for i in range (n):
if (arr[i] % 2 = = 0 ):
print ( "Even" , end = "")
return
print ( "Odd" , end = "")
if __name__ = = "__main__" :
arr = [ 2 , 12 , 20 , 36 , 38 ]
n = len (arr)
checkEvenOdd(arr, n)
|
C#
using System;
class GFG {
static void checkEvenOdd( int [] arr, int n)
{
for ( int i = 0; i < n; i++) {
if (arr[i] % 2 == 0) {
Console.Write( "Even" );
return ;
}
}
Console.Write( "Odd" );
}
static public void Main()
{
int [] arr = { 2, 12, 20, 36, 38 };
int n = arr.Length;
checkEvenOdd(arr, n);
}
}
|
Javascript
<script>
function checkEvenOdd(arr, n)
{
for (let i = 0; i < n; i++)
{
if (arr[i] % 2 == 0)
{
document.write ( "Even" );
return ;
}
}
document.write ( "Odd" );
}
let arr = [ 2, 12, 20, 36, 38 ];
let n = arr.length;
checkEvenOdd(arr, n);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...