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.
Input: N = 5
5 can be partitioned in the following ways:
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
Input: N = 10
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:
$k *= -1;
$k = 1 – $k;
// Drive Code
$N = 20;
// This code is contributed
// by mits
Time Complexity: O(N√N)
Space Complexity: O(N)
- 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 firstname.lastname@example.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.