Given an array arr[], the task is to count the number of unordered pairs of indices (i, j) such the gcd(2, a[i]^a[j]) > 1 and gcd(2, a[i] & a[j]) < 2 where ^ and & are bitwise XOR and bitwise AND operations respectively.
Examples:
Input: arr[] = {1, 2, 3, 4, 5}
Output: 3
All valid pairs are (1, 3), (1, 5) and (3, 5)
Input: arr[] = {21, 121, 13, 44, 65}
Output: 6
Approach:
- gcd(2, a[i]^a[j]) > 1 will only be true if both a[i] and a[j] are either even or odd.
- Narrowing down the pairs from the previous step, a pair (a, b) will never yield gcd(2, a[i] & a[j]) < 2 if both a and b are even. So, only pairs where a and b are both odd will satisfy both the given conditions.
- Count the number of odd element sin the given array and store it ion odd and the result will be (odd * (odd – 1)) / 2.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function to return the count of // odd numbers in the array int countOdd( int arr[], int n)
{ // Variable to count odd numbers
int odd = 0;
for ( int i = 0; i < n; i++) {
// Odd number
if (arr[i] % 2 == 1)
odd++;
}
return odd;
} // Function to return the count of valid pairs int countValidPairs( int arr[], int n)
{ int odd = countOdd(arr, n);
return (odd * (odd - 1)) / 2;
} // Driver Code int main()
{ int arr[] = { 1, 2, 3, 4, 5 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << countValidPairs(arr, n);
return 0;
} |
Java
// Java implementation of the approach class GFG
{ // Function to return the count of
// odd numbers in the array
static int countOdd( int [] arr, int n)
{
// Variable to count odd numbers
int odd = 0 ;
for ( int i = 0 ; i < n; i++)
{
// Odd number
if (arr[i] % 2 == 1 )
odd++;
}
return odd;
}
// Function to return the count of valid pairs
static int countValidPairs( int [] arr, int n)
{
int odd = countOdd(arr, n);
return (odd * (odd - 1 )) / 2 ;
}
// Driver Code
public static void main(String []args)
{
int [] arr = { 1 , 2 , 3 , 4 , 5 };
int n = arr.length;
System.out.println(countValidPairs(arr, n));
}
} // This code is contributed by ihritik |
Python3
# Python3 implementation of the approach # Function to return the count of # odd numbers in the array def countOdd(arr, n):
# Variable to count odd numbers
odd = 0 ;
for i in range ( 0 , n):
# Odd number
if (arr[i] % 2 = = 1 ):
odd = odd + 1 ;
return odd;
# Function to return the count # of valid pairs def countValidPairs(arr, n):
odd = countOdd(arr, n);
return (odd * (odd - 1 )) / 2 ;
# Driver Code arr = [ 1 , 2 , 3 , 4 , 5 ];
n = len (arr);
print ( int (countValidPairs(arr, n)));
# This code is contributed by # Shivi_Aggarwal |
C#
// C# implementation of the approach using System;
class GFG
{ // Function to return the count of
// odd numbers in the array
static int countOdd( int [] arr, int n)
{
// Variable to count odd numbers
int odd = 0;
for ( int i = 0; i < n; i++)
{
// Odd number
if (arr[i] % 2 == 1)
odd++;
}
return odd;
}
// Function to return the count of valid pairs
static int countValidPairs( int [] arr, int n)
{
int odd = countOdd(arr, n);
return (odd * (odd - 1)) / 2;
}
// Driver Code
public static void Main()
{
int [] arr = { 1, 2, 3, 4, 5 };
int n = arr.Length;
Console.WriteLine(countValidPairs(arr, n));
}
} // This code is contributed by ihritik |
PHP
<?php // PHP implementation of the approach // Function to return the count of // odd numbers in the array function countOdd( $arr , $n )
{ // Variable to count odd numbers
$odd = 0;
for ( $i = 0; $i < $n ; $i ++)
{
// Odd number
if ( $arr [ $i ] % 2 == 1)
$odd ++;
}
return $odd ;
} // Function to return the count // of valid pairs function countValidPairs( $arr , $n )
{ $odd = countOdd( $arr , $n );
return ( $odd * ( $odd - 1)) / 2;
} // Driver Code $arr = array (1, 2, 3, 4, 5);
$n = sizeof( $arr );
echo countValidPairs( $arr , $n );
// This code is contributed by Ryuga ?> |
Javascript
<script> // Javascript implementation of the approach // Function to return the count of // odd numbers in the array function countOdd(arr, n)
{ // Variable to count odd numbers
var odd = 0;
for ( var i = 0; i < n; i++)
{
// Odd number
if (arr[i] % 2 == 1)
odd++;
}
return odd;
} // Function to return the count of valid pairs function countValidPairs(arr, n)
{ var odd = countOdd(arr, n);
return (odd * (odd - 1)) / 2;
} // Driver Code var arr = [ 1, 2, 3, 4, 5 ];
var n = arr.length;
document.write(countValidPairs(arr, n)); // This code is contributed by Khushboogoyal499 </script> |
Output:
3
Time Complexity: O(N)
Auxiliary Space: O(1)