Given a number N, the task is to find the number of ways N can be partitioned, i.e. the number of ways that N can be expressed as a sum of positive integers.

**Note:** N should also be considered itself a way to express it as a sum of positive integers.

**Examples:**

Input:N = 5

Output:7

5 can be partitioned in the following ways:

5

4 + 1

3 + 2

3 + 1 + 1

2 + 2 + 1

2 + 1 + 1 + 1

1 + 1 + 1 + 1 + 1

Input:N = 10

Output:42

This post has been already discussed in Ways to write n as sum of two or more positive integers. In this post, an efficient approach is discussed.

**Approach(Using Euler’s recurrence):**

If p(n) is the number of partitions of N, then it can be generated by the following generating function:

Using this formula and Euler’s pentagonal number theorem, we can derive the following recurrence relation for p(n): (Check the Wikipedia article for more details)

where k = 1, -1, 2, -2, 3, -3, … and p(n) = 0 for n < 0.

**Below is the implementation of above approach:**

## C++

`// C++ implementation of above approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the number ` `// of partitions of N ` `long` `long` `partitions(` `int` `n) ` `{ ` ` ` `vector<` `long` `long` `> p(n + 1, 0); ` ` ` ` ` `// Base case ` ` ` `p[0] = 1; ` ` ` ` ` `for` `(` `int` `i = 1; i <= n; ++i) { ` ` ` `int` `k = 1; ` ` ` `while` `((k * (3 * k - 1)) / 2 <= i) { ` ` ` `p[i] += (k % 2 ? 1 : -1) * p[i - (k * (3 * k - 1)) / 2]; ` ` ` ` ` `if` `(k > 0) ` ` ` `k *= -1; ` ` ` `else` ` ` `k = 1 - k; ` ` ` `} ` ` ` `} ` ` ` ` ` `return` `p[n]; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `N = 20; ` ` ` `cout << partitions(N); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python 3

`# Python 3 implementation of ` `# above approach ` ` ` `# Function to find the number ` `# of partitions of N ` `def` `partitions(n): ` ` ` ` ` `p ` `=` `[` `0` `] ` `*` `(n ` `+` `1` `) ` ` ` ` ` `# Base case ` ` ` `p[` `0` `] ` `=` `1` ` ` ` ` `for` `i ` `in` `range` `(` `1` `, n ` `+` `1` `): ` ` ` `k ` `=` `1` ` ` `while` `((k ` `*` `(` `3` `*` `k ` `-` `1` `)) ` `/` `2` `<` `=` `i) : ` ` ` `p[i] ` `+` `=` `((` `1` `if` `k ` `%` `2` `else` `-` `1` `) ` `*` ` ` `p[i ` `-` `(k ` `*` `(` `3` `*` `k ` `-` `1` `)) ` `/` `/` `2` `]) ` ` ` ` ` `if` `(k > ` `0` `): ` ` ` `k ` `*` `=` `-` `1` ` ` `else` `: ` ` ` `k ` `=` `1` `-` `k ` ` ` ` ` `return` `p[n] ` ` ` `# Driver code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` `N ` `=` `20` ` ` `print` `(partitions(N)) ` ` ` `# This code is contributed ` `# by ChitraNayal ` |

*chevron_right*

*filter_none*

## PHP

0)

$k *= -1;

else

$k = 1 – $k;

}

}

return $p[$n];

}

// Drive Code

$N = 20;

print(partitions($N));

// This code is contributed

// by mits

?>

**Output:**

627

**Time Complexity**: O(N√N)

**Space Complexity**: O(N)

## Recommended Posts:

- Ways to write n as sum of two or more positive integers
- Divide two integers without using multiplication, division and mod operator | Set2
- Number of arrays of size N whose elements are positive integers and sum is K
- Count positive integers with 0 as a digit and maximum 'd' digits
- Count ways to express even number ‘n’ as sum of even integers
- Number of ways to form a heap with n distinct integers
- Count 'd' digit positive integers with 0 as a digit
- Median in a stream of integers (running integers)
- Minimum positive integer value possible of X for given A and B in X = P*A + Q*B
- Print first k digits of 1/n where n is a positive integer
- Count ordered pairs of positive numbers such that their sum is S and XOR is K
- Kth Smallest sum of continuous subarrays of positive numbers
- Algorithm to generate positive rational numbers
- Check if a triangle of positive area is possible with the given angles
- Nicomachus’s Theorem (Sum of k-th group of odd positive numbers)

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.