# Different ways to represent N as sum of K non-zero integers

• Difficulty Level : Medium
• Last Updated : 23 May, 2022

Given N and K. The task is to find out how many different ways there are to represent N as the sum of K non-zero integers.

Examples:

Input: N = 5, K = 3
Output:
The possible combinations of integers are:
( 1, 1, 3 )
( 1, 3, 1 )
( 3, 1, 1 )
( 1, 2, 2 )
( 2, 2, 1 )
( 2, 1, 2 )

Input: N = 10, K = 4
Output: 84

The approach to the problem is to observe a sequence and use combinations to solve the problem. To obtain a number N, N 1’s are required, summation of N 1’s will give N. The problem allows you to use K integers only to make N.

Observation:

```Let's take N = 5 and K = 3, then all
possible combinations of K numbers are: ( 1, 1, 3 )
( 1, 3, 1 )
( 3, 1, 1 )
( 1, 2, 2 )
( 2, 2, 1 )
( 2, 1, 2 )

The above can be rewritten as: ( 1, 1, 1 + 1 + 1 )
( 1, 1 + 1 + 1, 1 )
( 1 + 1 + 1, 1, 1 )
( 1, 1 + 1, 1 + 1 )
( 1 + 1, 1 + 1, 1 )
( 1 + 1, 1, 1 + 1 )```

From above, a conclusion can be drawn that of N 1’s, k-1 commas have to be placed in between N 1’s and the remaining places are to be filled with ‘+’ signs. All combinations of placing k-1 commas and placing ‘+’ signs in the remaining places will be the answer. So, in general, for N there will be N-1 spaces between all 1, and out of those choose k-1 and place a comma in between those 1. In between the rest 1’s, place ‘+’ signs. So the way of choosing K-1 objects out of N-1 is . The dynamic programming approach is used to calculate .

Below is the implementation of the above approach:

## C++

 `// CPP program to calculate Different ways to``// represent N as sum of K non-zero integers.``#include ``using` `namespace` `std;` `// Returns value of Binomial Coefficient C(n, k)``int` `binomialCoeff(``int` `n, ``int` `k)``{``    ``int` `C[n + 1][k + 1];``    ``int` `i, j;` `    ``// Calculate value of Binomial Coefficient in bottom up manner``    ``for` `(i = 0; i <= n; i++) {``        ``for` `(j = 0; j <= min(i, k); j++) {``            ``// Base Cases``            ``if` `(j == 0 || j == i)``                ``C[i][j] = 1;` `            ``// Calculate value using previously stored values``            ``else``                ``C[i][j] = C[i - 1][j - 1] + C[i - 1][j];``        ``}``    ``}` `    ``return` `C[n][k];``}` `// Driver Code``int` `main()``{``    ``int` `n = 5, k = 3;``    ``cout << ``"Total number of different ways are "``         ``<< binomialCoeff(n - 1, k - 1);``    ``return` `0;``}`

## C

 `// C program to calculate Different ways to``// represent N as sum of K non-zero integers.``#include ` `int` `min(``int` `a, ``int` `b)``{``  ``int` `min = a;``  ``if``(min > b)``    ``min = b;``  ``return` `min;``}` `// Returns value of Binomial Coefficient C(n, k)``int` `binomialCoeff(``int` `n, ``int` `k)``{``    ``int` `C[n + 1][k + 1];``    ``int` `i, j;` `    ``// Calculate value of Binomial Coefficient in bottom up manner``    ``for` `(i = 0; i <= n; i++) {``        ``for` `(j = 0; j <= min(i, k); j++) {``            ``// Base Cases``            ``if` `(j == 0 || j == i)``                ``C[i][j] = 1;` `            ``// Calculate value using previously stored values``            ``else``                ``C[i][j] = C[i - 1][j - 1] + C[i - 1][j];``        ``}``    ``}` `    ``return` `C[n][k];``}` `// Driver Code``int` `main()``{``    ``int` `n = 5, k = 3;``    ``printf``(``"Total number of different ways are %d"``,binomialCoeff(n - 1, k - 1));``    ``return` `0;``}` `// This code is contributed by kothavvsaakash.`

## Java

 `// Java program to calculate``// Different ways to represent``// N as sum of K non-zero integers.``import` `java.io.*;` `class` `GFG``{` `// Returns value of Binomial``// Coefficient C(n, k)``static` `int` `binomialCoeff(``int` `n,``                         ``int` `k)``{``    ``int` `C[][] = ``new` `int` `[n + ``1``][k + ``1``];``    ``int` `i, j;` `    ``// Calculate value of Binomial``    ``// Coefficient in bottom up manner``    ``for` `(i = ``0``; i <= n; i++)``    ``{``        ``for` `(j = ``0``;``             ``j <= Math.min(i, k); j++)``        ``{``            ``// Base Cases``            ``if` `(j == ``0` `|| j == i)``                ``C[i][j] = ``1``;` `            ``// Calculate value using``            ``// previously stored values``            ``else``                ``C[i][j] = C[i - ``1``][j - ``1``] +``                          ``C[i - ``1``][j];``        ``}``    ``}` `    ``return` `C[n][k];``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ``int` `n = ``5``, k = ``3``;``    ``System.out.println( ``"Total number of "` `+``                     ``"different ways are "` `+``                        ``binomialCoeff(n - ``1``,``                                      ``k - ``1``));``}``}` `// This code is contributed``// by anuj_67.`

## Python3

 `# python 3 program to calculate Different ways to``# represent N as sum of K non-zero integers.` `# Returns value of Binomial Coefficient C(n, k)``def` `binomialCoeff(n, k):``    ``C ``=` `[[``0` `for` `i ``in` `range``(k``+``1``)]``for` `i ``in` `range``(n``+``1``)]` `    ``# Calculate value of Binomial Coefficient in bottom up manner``    ``for` `i ``in` `range``(``0``,n``+``1``,``1``):``        ``for` `j ``in` `range``(``0``,``min``(i, k)``+``1``,``1``):``            ``# Base Cases``            ``if` `(j ``=``=` `0` `or` `j ``=``=` `i):``                ``C[i][j] ``=` `1` `            ``# Calculate value using previously stored values``            ``else``:``                ``C[i][j] ``=` `C[i ``-` `1``][j ``-` `1``] ``+` `C[i ``-` `1``][j]` `    ``return` `C[n][k]` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``n ``=` `5``    ``k ``=` `3``    ``print``(``"Total number of different ways are"``,binomialCoeff(n ``-` `1``, k ``-` `1``))``    ` `# This code is contributed by``# Sanjit_Prasad`

## C#

 `// C# program to calculate``// Different ways to represent``// N as sum of K non-zero integers.``using` `System;` `class` `GFG``{` `// Returns value of Binomial``// Coefficient C(n, k)``static` `int` `binomialCoeff(``int` `n,``                         ``int` `k)``{``    ``int` `[,]C = ``new` `int` `[n + 1,``                        ``k + 1];``    ``int` `i, j;` `    ``// Calculate value of``    ``// Binomial Coefficient``    ``// in bottom up manner``    ``for` `(i = 0; i <= n; i++)``    ``{``        ``for` `(j = 0;``            ``j <= Math.Min(i, k); j++)``        ``{``            ``// Base Cases``            ``if` `(j == 0 || j == i)``                ``C[i, j] = 1;` `            ``// Calculate value using``            ``// previously stored values``            ``else``                ``C[i, j] = C[i - 1, j - 1] +``                          ``C[i - 1, j];``        ``}``    ``}` `    ``return` `C[n,k];``}` `// Driver Code``public` `static` `void` `Main ()``{``    ``int` `n = 5, k = 3;``    ``Console.WriteLine( ``"Total number of "` `+``                    ``"different ways are "` `+``                       ``binomialCoeff(n - 1,``                                   ``k - 1));``}``}` `// This code is contributed``// by anuj_67.`

## PHP

 ``

## Javascript

 ``

Output:

`Total number of different ways are 6`

Time Complexity: O(N * K)
Auxiliary Space: O(N * K)

My Personal Notes arrow_drop_up