Given an integer N, the task is to count the number of even and odd binomial coefficients up to Nth power.
Examples:
Input: N = 4
Output:
Odd: 2
Even: 3
Explanation:
The binomial coefficients are as follows:
4C0 = 1, 4C1 = 4 , 4C2 = 6 , 4C3 = 4 , 4C4 = 1.
Therefore, it can be observed that there exists exactly 2 odd and 3 even Binomial Coefficients.
Input: N = 5
Output:
Odd: 4
Even: 2
Explanation:
The binomial coefficients are as follows:
5C0 = 1, 5C1 = 5, 5C2 = 10, 5C3 = 10, 5C4 = 5, 5C5 = 1.
Therefore, there are 4 odd and 2 even coefficients.
Solution Approach: The idea to solve this problem is using Bit Manipulation. Find the set bits in the given integer N. Count of odd binomial coefficients are equal to 2 ^ Count of Set Bits in N. Similarly the count of even binomial coefficients is equal to (N + 1 – 2 ^ Count of Set Bits in N).
Below is the implementation of the above approach:
C++
#include <iostream>
#include <math.h>
using namespace std;
int countSetBits( int N)
{
int count = 0;
while (N) {
N = N & (N - 1);
count++;
}
return count;
}
int main()
{
int N = 4;
int bits = countSetBits(N);
cout << "Odd "
<< ": " << pow (2, bits) << "\n" ;
cout << "Even "
<< ": " << N + 1 - pow (2, bits)
<< "\n" ;
return 0;
}
|
Java
import java.util.*;
class GFG{
static int countSetBits( int N)
{
int count = 0 ;
while (N != 0 )
{
N = N & (N - 1 );
count++;
}
return count;
}
public static void main(String[] args)
{
int N = 4 ;
int bits = countSetBits(N);
System.out.println( "Odd " + ": " +
( int )(Math.pow( 2 , bits)));
System.out.println( "Even " + ": " +
(N + 1 - ( int )(Math.pow( 2 , bits))));
}
}
|
Python3
def countSetBits(N: int ) - > int :
count = 0
while (N):
N = N & (N - 1 )
count + = 1
return count
if __name__ = = "__main__" :
N = 4
bits = countSetBits(N)
print ( "Odd : {}" . format ( pow ( 2 , bits)))
print ( "Even : {}" . format (N + 1 - pow ( 2 , bits)))
|
C#
using System;
class GFG{
static int countSetBits( int N)
{
int count = 0;
while (N != 0)
{
N = N & (N - 1);
count++;
}
return count;
}
public static void Main()
{
int N = 4;
int bits = countSetBits(N);
Console.WriteLine( "Odd " + ": " +
( int )(Math.Pow(2, bits)));
Console.WriteLine( "Even " + ": " +
(N + 1 - ( int )(Math.Pow(2, bits))));
}
}
|
Javascript
<script>
function countSetBits(N)
{
let count = 0;
while (N != 0)
{
N = N & (N - 1);
count++;
}
return count;
}
let N = 4;
let bits = countSetBits(N);
document.write( "Odd " + ": " +
(Math.pow(2, bits)) + "<br/>" );
document.write( "Even " + ": " +
(N + 1 - (Math.pow(2, bits))));
</script>
|
Time Complexity: O(log N), where N is the input number
Auxiliary Space: O(1)
Approach: To count the number of odd and even binomial coefficients of N-th power, we can use the following approach
- Initialize two counters, one for counting odd coefficients and one for counting even coefficients, to zero.
- Loop through all possible values of k from 0 to N.
- For each value of k, calculate the binomial coefficient C(N, k) using the formula: C(N, k) = N! / (k! * (N – k)!) where “!” denotes the factorial function.
- Check if the calculated binomial coefficient is odd or even. If it’s odd, increment the counter for odd coefficients. If it’s even, increment the counter for even coefficients. After the loop, the counters will contain the total count of odd and even binomial coefficients for N-th power.
C++
#include <iostream>
#include <tuple> // Include the tuple library
using namespace std;
tuple< int , int > count_odd_even_binomial_coefficients( int N) {
int odd_count = 0;
int even_count = 0;
for ( int k = 0; k <= N; k++) {
int coefficient = 1;
for ( int i = 1; i <= k; i++) {
coefficient = coefficient * (N - i + 1) / i;
}
if (coefficient % 2 == 0) {
even_count++;
} else {
odd_count++;
}
}
return make_tuple(odd_count, even_count);
}
int main() {
int N = 4;
int odd_count, even_count;
tie(odd_count, even_count) = count_odd_even_binomial_coefficients(N);
cout << "Odd: " << odd_count << endl;
cout << "Even: " << even_count << endl;
return 0;
}
|
Java
import java.util.*;
public class Main {
public static int [] countOddEvenBinomialCoefficients( int N) {
int oddCount = 0 ;
int evenCount = 0 ;
for ( int k = 0 ; k <= N; k++) {
int coefficient = 1 ;
for ( int i = 1 ; i <= k; i++) {
coefficient = coefficient * (N - i + 1 ) / i;
}
if (coefficient % 2 == 0 ) {
evenCount++;
} else {
oddCount++;
}
}
return new int []{oddCount, evenCount};
}
public static void main(String[] args) {
int N = 4 ;
int [] counts = countOddEvenBinomialCoefficients(N);
int oddCount = counts[ 0 ];
int evenCount = counts[ 1 ];
System.out.println( "Odd: " + oddCount);
System.out.println( "Even: " + evenCount);
}
}
|
Python3
def count_odd_even_binomial_coefficients(N):
odd_count = 0
even_count = 0
for k in range (N + 1 ):
coefficient = 1
for i in range ( 1 , k + 1 ):
coefficient = (coefficient * (N - i + 1 )) / / i
if coefficient % 2 = = 0 :
even_count + = 1
else :
odd_count + = 1
return odd_count, even_count
N = 4
odd_count, even_count = count_odd_even_binomial_coefficients(N)
print ( "Odd:" , odd_count)
print ( "Even:" , even_count)
|
C#
using System;
class Program
{
static ( int oddCount, int evenCount) CountOddEvenBinomialCoefficients( int N)
{
int oddCount = 0;
int evenCount = 0;
for ( int k = 0; k <= N; k++)
{
int coefficient = 1;
for ( int i = 1; i <= k; i++)
{
coefficient = coefficient * (N - i + 1) / i;
}
if (coefficient % 2 == 0)
{
evenCount++;
}
else
{
oddCount++;
}
}
return (oddCount, evenCount);
}
static void Main()
{
int N = 4;
( int oddCount, int evenCount) = CountOddEvenBinomialCoefficients(N);
Console.WriteLine( "Odd: " + oddCount);
Console.WriteLine( "Even: " + evenCount);
}
}
|
Javascript
function count_odd_even_binomial_coefficients(N) {
let odd_count = 0;
let even_count = 0;
for (let k = 0; k <= N; k++) {
let coefficient = 1;
for (let i = 1; i <= k; i++) {
coefficient = (coefficient * (N - i + 1)) / i;
}
if (coefficient % 2 === 0) {
even_count++;
} else {
odd_count++;
}
}
return [odd_count, even_count];
}
function main() {
const N = 4;
const [odd_count, even_count] = count_odd_even_binomial_coefficients(N);
console.log( "Odd:" , odd_count);
console.log( "Even:" , even_count);
}
main();
|
Time Complexity: O(N^2), where N is the input parameter.
Auxiliary Space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
26 Oct, 2023
Like Article
Save Article