Given a positive integer n. The task is to find the sum of product of consecutive binomial coefficient i.e
nC0*nC1 + nC1*nC2 + ….. + nCn-1*nCn
Examples:
Input : n = 3
Output : 15
3C0*3C1 + 3C1*3C2 +3C2*3C3
= 1*3 + 3*3 + 3*1
= 3 + 9 + 3
= 15
Input : n = 4
Output : 56
Method 1: The idea is to find all the binomial coefficients up to nth term and find the sum of the product of consecutive coefficients.
Below is the implementation of this approach:
C++
// CPP Program to find sum of product of // consecutive Binomial Coefficient. #include <bits/stdc++.h> using namespace std; #define MAX 100 // Find the binomial coefficient upto nth term void binomialCoeff( int C[], int n) { C[0] = 1; // nC0 is 1 for ( int i = 1; i <= n; i++) { // Compute next row of pascal triangle using // the previous row for ( int j = min(i, n); j > 0; j--) C[j] = C[j] + C[j - 1]; } } // Return the sum of the product of // consecutive binomial coefficient. int sumOfproduct( int n) { int sum = 0; int C[MAX] = { 0 }; binomialCoeff(C, n); // finding the sum of product of // consecutive coefficient. for ( int i = 0; i <= n; i++) sum += C[i] * C[i + 1]; return sum; } // Driven Program int main() { int n = 3; cout << sumOfproduct(n) << endl; return 0; } |
Java
// Java Program to find sum of product of // consecutive Binomial Coefficient. import java.io.*; class GFG { static int MAX = 100 ; // Find the binomial coefficient upto nth term static void binomialCoeff( int C[], int n) { C[ 0 ] = 1 ; // nC0 is 1 for ( int i = 1 ; i <= n; i++) { // Compute next row of pascal triangle using // the previous row for ( int j = Math.min(i, n); j > 0 ; j--) C[j] = C[j] + C[j - 1 ]; } } // Return the sum of the product of // consecutive binomial coefficient. static int sumOfproduct( int n) { int sum = 0 ; int C[] = new int [MAX]; binomialCoeff(C, n); // finding the sum of product of // consecutive coefficient. for ( int i = 0 ; i <= n; i++) sum += C[i] * C[i + 1 ]; return sum; } // Driven Program public static void main (String[] args) { int n = 3 ; System.out.println( sumOfproduct(n)); } } // This code is contributed by inder_verma.. |
Python3
# Python3 Program to find sum of product # of consecutive Binomial Coefficient. MAX = 100 ; # Find the binomial coefficient upto # nth term def binomialCoeff(C, n): C[ 0 ] = 1 ; # nC0 is 1 for i in range ( 1 , n + 1 ): # Compute next row of # pascal triangle using # the previous row for j in range ( min (i, n), 0 , - 1 ): C[j] = C[j] + C[j - 1 ]; return C; # Return the sum of the product of # consecutive binomial coefficient. def sumOfproduct(n): sum = 0 ; C = [ 0 ] * MAX ; C = binomialCoeff(C, n); # finding the sum of # product of consecutive # coefficient. for i in range (n + 1 ): sum + = C[i] * C[i + 1 ]; return sum ; # Driver Code n = 3 ; print (sumOfproduct(n)); # This code is contributed by mits |
C#
// C# Program to find sum of // product of consecutive // Binomial Coefficient. using System; class GFG { static int MAX = 100; // Find the binomial coefficient // upto nth term static void binomialCoeff( int []C, int n) { C[0] = 1; // nC0 is 1 for ( int i = 1; i <= n; i++) { // Compute next row of pascal // triangle using the previous row for ( int j = Math.Min(i, n); j > 0; j--) C[j] = C[j] + C[j - 1]; } } // Return the sum of the product of // consecutive binomial coefficient. static int sumOfproduct( int n) { int sum = 0; int []C = new int [MAX]; binomialCoeff(C, n); // finding the sum of product of // consecutive coefficient. for ( int i = 0; i <= n; i++) sum += C[i] * C[i + 1]; return sum; } // Driven Code public static void Main () { int n = 3; Console.WriteLine(sumOfproduct(n)); } } // This code is contributed by anuj_67 |
Javascript
<script> // Javascript Program to find sum of product of // consecutive Binomial Coefficient. var MAX = 100; // Find the binomial coefficient upto nth term function binomialCoeff(C, n) { C[0] = 1; // nC0 is 1 for ( var i = 1; i <= n; i++) { // Compute next row of pascal triangle using // the previous row for ( var j = Math.min(i, n); j > 0; j--) C[j] = C[j] + C[j - 1]; } } // Return the sum of the product of // consecutive binomial coefficient. function sumOfproduct(n) { var sum = 0; var C = Array(MAX).fill(0); binomialCoeff(C, n); // finding the sum of product of // consecutive coefficient. for ( var i = 0; i <= n; i++) sum += C[i] * C[i + 1]; return sum; } // Driven Program var n = 3; document.write( sumOfproduct(n)); </script> |
PHP
<?php // PHP Program to find sum // of product of consecutive // Binomial Coefficient. $MAX = 100; // Find the binomial // coefficient upto // nth term function binomialCoeff( $C , $n ) { $C [0] = 1; // nC0 is 1 for ( $i = 1; $i <= $n ; $i ++) { // Compute next row of // pascal triangle using // the previous row for ( $j = min( $i , $n ); $j > 0; $j --) $C [ $j ] = $C [ $j ] + $C [ $j - 1]; } return $C ; } // Return the sum of the // product of consecutive // binomial coefficient. function sumOfproduct( $n ) { global $MAX ; $sum = 0; $C = array_fill (0, $MAX , 0); $C = binomialCoeff( $C , $n ); // finding the sum of // product of consecutive // coefficient. for ( $i = 0; $i <= $n ; $i ++) $sum += $C [ $i ] * $C [ $i + 1]; return $sum ; } // Driver Code $n = 3; echo sumOfproduct( $n ); // This code is contributed by mits ?> |
Output
15
Method 2:
We know,
(1 + x)n = nC0 + nC1*x + nC2*x2 + …. + nCn*xn … (1)
(1 + 1/x)n = nC0 + nC1/x + nC2/x2 + …. + nCn/xn … (2)
Multiplying (1) and (2), we get
(1 + x)2n/xn = (nC0 + nC1*x + nC2*x2 + …. + nCn*xn) * (nC0 + nC1/x + nC2/x2 + …. + nCn/xn)
(2nC0 + 2nC1*x + 2nC2*x2 + …. + 2nCn*xn)/xn = (nC0 + nC1*x + nC2*x2 + …. + nCn*xn) * (nC0 + nC1/x + nC2/x2 + …. + nCn/xn)
Now, find the coefficient of x in LHS,
Observe rth term of expansion in numerator is 2nCrxr.
To find the coefficient of x in (1 + x)2n/xn, r should be n + 1, because power of x in denominator will reduce it.
So, coefficient of x in LHS = 2nCn + 1 or 2nCn – 1
Now, find the coefficient of x in RHS,
r th term of first expansion of multiplication is nCr * xr
t th term of second expansion of multiplication is nCt / xt
So term after multiply will be nCr * xr * nCt / xt or
nCr * nCt * xr / xt
Put r = t + 1, we get,
nCt+1 * nCt * x
Observe there will be n such term in the expansion of multiply, so t range from 0 to n – 1.
Therefore, coefficient of x in RHS = nC0*nC1 + nC1*nC2 + ….. + nCn-1*nCn
Comparing coefficient of x in LHS and RHS, we can say,
nC0*nC1 + nC1*nC2 + ….. + nCn-1*nCn = 2nCn – 1
Below is implementation of this approach:
C++
// CPP Program to find sum of product of // consecutive Binomial Coefficient. #include <bits/stdc++.h> using namespace std; #define MAX 100 // Find the binomial coefficient up to nth // term int binomialCoeff( int n, int k) { int C[k + 1]; memset (C, 0, sizeof (C)); C[0] = 1; // nC0 is 1 for ( int i = 1; i <= n; i++) { // Compute next row of pascal triangle // using the previous row for ( int j = min(i, k); j > 0; j--) C[j] = C[j] + C[j - 1]; } return C[k]; } // Return the sum of the product of // consecutive binomial coefficient. int sumOfproduct( int n) { return binomialCoeff(2 * n, n - 1); } // Driven Program int main() { int n = 3; cout << sumOfproduct(n) << endl; return 0; } |
Java
// Java Program to find sum of // product of consecutive // Binomial Coefficient. import java.io.*; class GFG { static int MAX = 100 ; // Find the binomial coefficient // up to nth term static int binomialCoeff( int n, int k) { int C[] = new int [k + 1 ]; // memset(C, 0, sizeof(C)); C[ 0 ] = 1 ; // nC0 is 1 for ( int i = 1 ; i <= n; i++) { // Compute next row of // pascal triangle // using the previous row for ( int j = Math.min(i, k); j > 0 ; j--) C[j] = C[j] + C[j - 1 ]; } return C[k]; } // Return the sum of the // product of consecutive // binomial coefficient. static int sumOfproduct( int n) { return binomialCoeff( 2 * n, n - 1 ); } // Driver Code public static void main (String[] args) { int n = 3 ; System.out.println(sumOfproduct(n)); } } // This code is contributed // by shiv_bhakt. |
Python3
# Python3 Program to find sum of product # of consecutive Binomial Coefficient. MAX = 100 ; # Find the binomial coefficient # up to nth term def binomialCoeff(n, k): C = [ 0 ] * (k + 1 ); C[ 0 ] = 1 ; # nC0 is 1 for i in range ( 1 , n + 1 ): # Compute next row of pascal triangle # using the previous row for j in range ( min (i, k), 0 , - 1 ): C[j] = C[j] + C[j - 1 ]; return C[k]; # Return the sum of the product of # consecutive binomial coefficient. def sumOfproduct(n): return binomialCoeff( 2 * n, n - 1 ); # Driver Code n = 3 ; print (sumOfproduct(n)); # This code is contributed by mits |
C#
// C# Program to find sum of // product of consecutive // Binomial Coefficient. using System; class GFG { // Find the binomial // coefficient up to // nth term static int binomialCoeff( int n, int k) { int []C = new int [k + 1]; // memset(C, 0, sizeof(C)); C[0] = 1; // nC0 is 1 for ( int i = 1; i <= n; i++) { // Compute next row of // pascal triangle // using the previous row for ( int j = Math.Min(i, k); j > 0; j--) C[j] = C[j] + C[j - 1]; } return C[k]; } // Return the sum of the // product of consecutive // binomial coefficient. static int sumOfproduct( int n) { return binomialCoeff(2 * n, n - 1); } // Driver Code static public void Main () { int n = 3; Console.WriteLine(sumOfproduct(n)); } } // This code is contributed // by @ajit. |
Javascript
<script> // Javascript Program to find sum of // product of consecutive // Binomial Coefficient. let MAX = 100; // Find the binomial coefficient // up to nth term function binomialCoeff(n, k) { let C = new Array(k + 1); C.fill(0); // memset(C, 0, sizeof(C)); C[0] = 1; // nC0 is 1 for (let i = 1; i <= n; i++) { // Compute next row of // pascal triangle // using the previous row for (let j = Math.min(i, k); j > 0; j--) C[j] = C[j] + C[j - 1]; } return C[k]; } // Return the sum of the // product of consecutive // binomial coefficient. function sumOfproduct(n) { return binomialCoeff(2 * n, n - 1); } let n = 3; document.write(sumOfproduct(n)); // This code is contributed by suresh07. </script> |
PHP
<?php // PHP Program to find sum of product of // consecutive Binomial Coefficient. $MAX = 100; // Find the binomial coefficient // up to nth term function binomialCoeff( $n , $k ) { $C = array_fill (0, ( $k + 1), 0); $C [0] = 1; // nC0 is 1 for ( $i = 1; $i <= $n ; $i ++) { // Compute next row of pascal triangle // using the previous row for ( $j = min( $i , $k ); $j > 0; $j --) $C [ $j ] = $C [ $j ] + $C [ $j - 1]; } return $C [ $k ]; } // Return the sum of the product of // consecutive binomial coefficient. function sumOfproduct( $n ) { return binomialCoeff(2 * $n , $n - 1); } // Driver Code $n = 3; echo sumOfproduct( $n ); // This code is contributed by mits ?> |
Output:
15
Time Complexity: O(n*k)
Auxiliary Space: O(k)
Efficient approach : space optimization
In this approach we use variables instead of array of size K to solve the problems by calculating Binomial Coefficient using iterative approach.
Implementations Steps:
- Define the binomialCoeff function to calculate the binomial coefficient using an iterative approach.
- Initialize a variable res to 1.
- Optimize the calculation by choosing the smaller value of k if k is greater than n – k.
- Use a loop to calculate the binomial coefficient by multiplying n – i and dividing by i + 1.
- Return the calculated binomial coefficient.
- Define the sumOfproduct function to calculate the sum of the product of consecutive binomial coefficients.
- Call the binomialCoeff function with arguments 2 * n and n – 1 to calculate the binomial coefficient.
- Return the calculated binomial coefficient.
Implementation:
C++
#include <iostream> using namespace std; // Function to calculate the binomial coefficient int binomialCoeff( int n, int k) { int res = 1; // Optimize calculation by choosing the smaller value of k if (k > n - k) k = n - k; // Calculate binomial coefficient using iterative approach for ( int i = 0; i < k; i++) { res *= (n - i); res /= (i + 1); } return res; } // Function to calculate the sum of product of consecutive binomial coefficients int sumOfproduct( int n) { // Calculate the binomial coefficient for 2n choose n-1 return binomialCoeff(2 * n, n - 1); } // Driven program int main() { int n = 3; // Function call cout << sumOfproduct(n) << endl; return 0; } |
Python3
# Function to calculate the binomial coefficient def binomial_coeff(n, k): res = 1 # Optimize calculation by choosing the smaller value of k if k > n - k: k = n - k # Calculate binomial coefficient using an iterative approach for i in range (k): res * = (n - i) res / / = (i + 1 ) return res # Function to calculate the sum of the product of consecutive binomial coefficients def sum_of_product(n): # Calculate the binomial coefficient for 2n choose n-1 return binomial_coeff( 2 * n, n - 1 ) # Driven Code if __name__ = = "__main__" : n = 3 # Function call print (sum_of_product(n)) |
C#
using System; class Program { // Function to calculate the binomial coefficient static int BinomialCoeff( int n, int k) { int res = 1; // Optimize calculation by choosing the smaller value of k if (k > n - k) k = n - k; // Calculate binomial coefficient using iterative approach for ( int i = 0; i < k; i++) { res *= (n - i); res /= (i + 1); } return res; } // Function to calculate the sum of product of consecutive binomial coefficients static int SumOfProduct( int n) { // Calculate the binomial coefficient for 2n choose n-1 return BinomialCoeff(2 * n, n - 1); } // Driver code static void Main( string [] args) { int n = 3; // Function call Console.WriteLine(SumOfProduct(n)); } } |
Output:
15
Time Complexity: O(k)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!