Parity: Parity of a number refers to whether it contains an odd or even number of 1-bits. The number has “odd parity”, if it contains odd number of 1-bits and is “even parity” if it contains even number of 1-bits.
Main idea of the below solution is – Loop while n is not 0 and in loop unset one of the set bits and invert parity.
Algorithm: getParity(n) 1. Initialize parity = 0 2. Loop while n != 0 a. Invert parity parity = !parity b. Unset rightmost set bit n = n & (n-1) 3. return parity Example: Initialize: n = 13 (1101) parity = 0 n = 13 & 12 = 12 (1100) parity = 1 n = 12 & 11 = 8 (1000) parity = 0 n = 8 & 7 = 0 (0000) parity = 1
Program:
// C++ program to find parity // of an integer # include<bits/stdc++.h> # define bool int using namespace std;
// Function to get parity of number n. It returns 1 // if n has odd parity, and returns 0 if n has even // parity bool getParity(unsigned int n)
{ bool parity = 0;
while (n)
{
parity = !parity;
n = n & (n - 1);
}
return parity;
} /* Driver program to test getParity() */ int main()
{ unsigned int n = 7;
cout<< "Parity of no " <<n<< " = " <<(getParity(n)? "odd" : "even" );
getchar ();
return 0;
} |
// C program to find parity // of an integer # include <stdio.h> # define bool int /* Function to get parity of number n. It returns 1 if n has odd parity, and returns 0 if n has even
parity */
bool getParity(unsigned int n)
{ bool parity = 0;
while (n)
{
parity = !parity;
n = n & (n - 1);
}
return parity;
} /* Driver program to test getParity() */ int main()
{ unsigned int n = 7;
printf ( "Parity of no %d = %s" , n,
(getParity(n)? "odd" : "even" ));
getchar ();
return 0;
} |
// Java program to find parity // of an integer import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.BigInteger;
class GFG
{
/* Function to get parity of number n.
It returns 1 if n has odd parity, and
returns 0 if n has even parity */
static boolean getParity( int n)
{
boolean parity = false ;
while (n != 0 )
{
parity = !parity;
n = n & (n- 1 );
}
return parity;
}
/* Driver program to test getParity() */
public static void main (String[] args)
{
int n = 12 ;
System.out.println( "Parity of no " + n + " = " +
(getParity(n)? "odd" : "even" ));
}
} /* This code is contributed by Amit khandelwal*/ |
# Python3 code to get parity. # Function to get parity of number n. # It returns 1 if n has odd parity, # and returns 0 if n has even parity def getParity( n ):
parity = 0
while n:
parity = ~parity
n = n & (n - 1 )
return parity
# Driver program to test getParity() n = 7
print ( "Parity of no " , n, " = " ,
( "odd" if getParity(n) else "even" ))
# This code is contributed by "Sharad_Bhardwaj". |
// C# program to find parity of an integer using System;
class GFG {
/* Function to get parity of number n.
It returns 1 if n has odd parity, and
returns 0 if n has even parity */
static bool getParity( int n)
{
bool parity = false ;
while (n != 0)
{
parity = !parity;
n = n & (n-1);
}
return parity;
}
// Driver code
public static void Main ()
{
int n = 7;
Console.Write( "Parity of no " + n
+ " = " + (getParity(n)?
"odd" : "even" ));
}
} // This code is contributed by nitin mittal. |
<?php // PHP program to find the parity // of an unsigned integer // Function to get parity of // number n. It returns 1 // if n has odd parity, and // returns 0 if n has even // parity function getParity( $n )
{ $parity = 0;
while ( $n )
{
$parity = ! $parity ;
$n = $n & ( $n - 1);
}
return $parity ;
} // Driver Code
$n = 7;
echo "Parity of no " , $n , " = " ,
getParity( $n )? "odd" : "even" ;
// This code is contributed by anuj_67. ?> |
Output:
Parity of no 7 = odd
Above solution can be optimized by using lookup table. Please refer to Bit Twiddle Hacks[1st reference] for details.
Time Complexity: The time taken by above algorithm is proportional to the number of bits set. Worst case complexity is O(Log n).
Uses: Parity is used in error detection and cryptography.
Compute the parity of a number using XOR and table look-up
References:
http://graphics.stanford.edu/~seander/bithacks.html#ParityNaive – last checked on 30 May 2009.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.