 Open in App
Not now

# Ways to write n as sum of two or more positive integers

• Difficulty Level : Medium
• Last Updated : 20 Dec, 2022

For a given number n > 0, find the number of different ways in which n can be written as a sum of two or more positive integers.

Examples:

```Input : n = 5
Output : 6
Explanation : All possible six ways are :
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1

Input : 4
Output : 4
Explanation : All possible four ways are :
3 + 1
2 + 2
2 + 1 + 1
1 + 1 + 1 + 1```
Recommended Practice

This problem can be solved in a similar fashion as coin change problem, the difference is only that in this case we should iterate for 1 to n-1 instead of particular values of coin as in coin-change problem.

## C++

 `// Program to find the number of ways, n can be``// written as sum of two or more positive integers.``#include ``using` `namespace` `std;` `// Returns number of ways to write n as sum of``// two or more positive integers``int` `countWays(``int` `n)``{``    ``// table[i] will be storing the number of``    ``// solutions for value i. We need n+1 rows``    ``// as the table is constructed in bottom up``    ``// manner using the base case (n = 0)``    ``int` `table[n+1];` `    ``// Initialize all table values as 0``    ``memset``(table, 0, ``sizeof``(table));` `    ``// Base case (If given value is 0)``    ``table = 1;` `    ``// Pick all integer one by one and update the``    ``// table[] values after the index greater``    ``// than or equal to n``    ``for` `(``int` `i=1; i

## Java

 `// Program to find the number of ways,``// n can be written as sum of two or``// more positive integers.``import` `java.util.Arrays;` `class` `GFG {``    ` `    ``// Returns number of ways to write``    ``// n as sum of two or more positive``    ``// integers``    ``static` `int` `countWays(``int` `n)``    ``{``        ` `        ``// table[i] will be storing the``        ``// number of solutions for value``        ``// i. We need n+1 rows as the``        ``// table is constructed in bottom``        ``// up manner using the base case``        ``// (n = 0)``        ``int` `table[] = ``new` `int``[n + ``1``];``    ` `        ``// Initialize all table values as 0``        ``Arrays.fill(table, ``0``);``    ` `        ``// Base case (If given value is 0)``        ``table[``0``] = ``1``;``    ` `        ``// Pick all integer one by one and``        ``// update the table[] values after``        ``// the index greater than or equal``        ``// to n``        ``for` `(``int` `i = ``1``; i < n; i++)``            ``for` `(``int` `j = i; j <= n; j++)``                ``table[j] += table[j - i];``    ` `        ``return` `table[n];``    ``}``    ` `    ``//driver code``    ``public` `static` `void` `main (String[] args)``    ``{``        ``int` `n = ``7``;``        ` `        ``System.out.print(countWays(n));``    ``}``}` `// This code is contributed by Anant Agarwal.`

## Python3

 `# Program to find the number of ways, n can be``# written as sum of two or more positive integers.` `# Returns number of ways to write n as sum of``# two or more positive integers``def` `CountWays(n):` `    ``# table[i] will be storing the number of``    ``# solutions for value i. We need n+1 rows``    ``# as the table is constructed in bottom up``    ``# manner using the base case (n = 0)``    ``# Initialize all table values as 0``    ``table ``=``[``0``] ``*` `(n ``+` `1``)` `    ``# Base case (If given value is 0)``    ``# Only 1 way to get 0 (select no integer)``    ``table[``0``] ``=` `1` `    ``# Pick all integer one by one and update the``    ``# table[] values after the index greater``    ``# than or equal to n``    ``for` `i ``in` `range``(``1``, n ):` `        ``for` `j ``in` `range``(i , n ``+` `1``):` `            ``table[j] ``+``=`  `table[j ``-` `i]           ` `    ``return` `table[n]` `# driver program``def` `main():` `    ``n ``=` `7` `    ``print` `(CountWays(n))` `if` `__name__ ``=``=` `'__main__'``:``    ``main()` `#This code is contributed by Neelam Yadav`

## C#

 `// Program to find the number of ways, n can be``// written as sum of two or more positive integers.``using` `System;` `class` `GFG {``    ` `    ``// Returns number of ways to write n as sum of``    ``// two or more positive integers``    ``static` `int` `countWays(``int` `n)``    ``{``        ` `        ``// table[i] will be storing the number of``        ``// solutions for value i. We need n+1 rows``        ``// as the table is constructed in bottom up``        ``// manner using the base case (n = 0)``        ``int` `[]table = ``new` `int``[n+1];``     ` `        ``// Initialize all table values as 0``        ``for``(``int` `i = 0; i < table.Length; i++)``            ``table[i] = 0;``     ` `        ``// Base case (If given value is 0)``        ``table = 1;``     ` `        ``// Pick all integer one by one and update the``        ``// table[] values after the index greater``        ``// than or equal to n``        ``for` `(``int` `i = 1; i < n; i++)``            ``for` `(``int` `j = i; j <= n; j++)``                ``table[j] += table[j-i];``     ` `        ``return` `table[n];``    ``}``    ` `    ``//driver code``    ``public` `static` `void` `Main()``    ``{``        ``int` `n = 7;``        ` `        ``Console.Write(countWays(n));``    ``}``}` `// This code is contributed by Anant Agarwal.`

## PHP

 ``

## Javascript

 ``

Output

`14`

Time Complexity: O(n2)
Auxiliary Space: O(n)