Given a positive integer n. The task is to find the sum of the product of r and rth Binomial Coefficient. In other words find: ? (r * nCr), where 0 <= r <= n.
Examples:
Input : n = 2
Output : 4
0.2C0 + 1.2C1 + 2.2C2
= 0*2 + 1*2 + 2*1
= 4
Input : n = 5
Output : 80
Method 1 (Brute Force) : The idea is to iterate a loop i from 0 to n and evaluate i * nCi and add to sum variable.
Below is the implementation of this approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MAX 100
void binomialCoeff( int n, int C[])
{
C[0] = 1;
for ( int i = 1; i <= n; i++) {
for ( int j = min(i, n); j > 0; j--)
C[j] = C[j] + C[j - 1];
}
}
int summation( int n)
{
int C[MAX];
memset (C, 0, sizeof (C));
binomialCoeff(n, C);
int sum = 0;
for ( int i = 0; i <= n; i++)
sum += (i * C[i]);
return sum;
}
int main()
{
int n = 2;
cout << summation(n) << endl;
return 0;
}
|
Java
class GFG
{
static int MAX = 100 ;
static void binomialCoeff( int n,
int C[])
{
C[ 0 ] = 1 ;
for ( int i = 1 ; i <= n; i++)
{
for ( int j = Math.min(i, n); j > 0 ; j--)
C[j] = C[j] + C[j - 1 ];
}
}
static int summation( int n)
{
int C[] = new int [MAX];
for ( int i = 0 ; i < MAX; i++)
C[i] = 0 ;
binomialCoeff(n, C);
int sum = 0 ;
for ( int i = 0 ; i <= n; i++)
sum += (i * C[i]);
return sum;
}
public static void main(String args[])
{
int n = 2 ;
System.out.println( summation(n));
}
}
|
Python 3
MAX = 100
def binomialCoeff(n, C):
C[ 0 ] = 1
for i in range ( 1 , n + 1 ):
for j in range ( min (i, n), - 1 , - 1 ):
C[j] = C[j] + C[j - 1 ]
def summation( n):
C = [ 0 ] * MAX
binomialCoeff(n, C)
sum = 0
for i in range (n + 1 ):
sum + = (i * C[i])
return sum
if __name__ = = "__main__" :
n = 2
print (summation(n))
|
C#
using System;
class GFG
{
static int MAX = 100;
static void binomialCoeff( int n,
int []C)
{
C[0] = 1;
for ( int i = 1; i <= n; i++)
{
for ( int j = Math.Min(i, n);
j > 0; j--)
C[j] = C[j] + C[j - 1];
}
}
static int summation( int n)
{
int []C = new int [MAX];
for ( int i = 0; i < MAX; i++)
C[i] = 0;
binomialCoeff(n, C);
int sum = 0;
for ( int i = 0; i <= n; i++)
sum += (i * C[i]);
return sum;
}
public static void Main()
{
int n = 2;
Console.Write( summation(n));
}
}
|
PHP
<?php
$MAX = 100;
function binomialCoeff( $n , & $C )
{
$C [0] = 1;
for ( $i = 1; $i <= $n ; $i ++)
{
for ( $j = min( $i , $n ); $j > 0; $j --)
$C [ $j ] = $C [ $j ] + $C [ $j - 1];
}
}
function summation( $n )
{
global $MAX ;
$C = array_fill (0, $MAX , 0);
binomialCoeff( $n , $C );
$sum = 0;
for ( $i = 0; $i <= $n ; $i ++)
$sum += ( $i * $C [ $i ]);
return $sum ;
}
$n = 2;
echo summation( $n );
?>
|
Javascript
<script>
MAX = 100
function binomialCoeff(n, C) {
C[0] = 1;
for ( var i = 1; i <= n; i++) {
for ( var j = Math.min(i, n); j > 0; j--)
C[j] = C[j] + C[j - 1];
}
}
function summation(n) {
C = Array(MAX).fill(0);
binomialCoeff(n, C);
var sum = 0;
for ( var i = 0; i <= n; i++)
sum += (i * C[i]);
return sum;
}
var n = 2;
document.write(summation(n));
</script>
|
Time complexity: O(n*n)
space complexity: O(MAX)
Method 2 (Using formula) :
Mathematically we need to find,
? (i * nCi), where 0 <= i <= n
= ? (iC1 * nCi), (Since nC1 = n, we can write i as iC1)
= ? ( (i! / (i – 1)! * 1!) * (n! / (n – i)! * i!)
On cancelling i! from numerator and denominator
= ? (n! / (i – 1)! * (n – i)!)
= ? n * ((n – 1)!/ (i – 1)! * (n – i)!)
(Using reverse of nCr = (n)!/ (r)! * (n – r)!)
= n * ? n – 1Cr – 1
= n * 2n – 1 (Since ? nCr = 2n)
Below is the implementation of this approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MAX 100
int summation( int n)
{
return n << (n - 1);
}
int main()
{
int n = 2;
cout << summation(n) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int MAX = 100 ;
static int summation( int n)
{
return n << (n - 1 );
}
public static void main (String[] args)
{
int n = 2 ;
System.out.println( summation(n));
}
}
|
Python3
def summation( n):
return n << (n - 1 );
n = 2 ;
print (summation(n));
|
C#
using System;
class GFG {
static int summation( int n)
{
return n << (n - 1);
}
public static void Main ()
{
int n = 2;
Console.WriteLine( summation(n));
}
}
|
PHP
<?php
function summation( $n )
{
return $n << ( $n - 1);
}
$n = 2;
echo summation( $n ) ;
?>
|
Javascript
<script>
var MAX=100
function summation(n)
{
return n << (n - 1);
}
var n = 2;
document.write(summation(n));
</script>
|
Time Complexity: O(1)
Auxiliary Space: O(1)