Hi Everyone.
Now I'm wondering how to find the number of partition of an integer N(<=10^5).
Any advice?
The number of partition of 4 is 5.
4 = 4.
4 = 3 + 1.
4 = 2 + 2.
4 = 2 + 1 + 1.
4 = 1 + 1 + 1 + 1.
Thank You.
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 170 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 160 |
5 | djm03178 | 158 |
5 | -is-this-fft- | 158 |
7 | adamant | 154 |
7 | Dominater069 | 154 |
9 | awoo | 153 |
10 | luogu_official | 152 |
Hi Everyone.
Now I'm wondering how to find the number of partition of an integer N(<=10^5).
Any advice?
The number of partition of 4 is 5.
4 = 4.
4 = 3 + 1.
4 = 2 + 2.
4 = 2 + 1 + 1.
4 = 1 + 1 + 1 + 1.
Thank You.
Name |
---|
Auto comment: topic has been updated by YogayoG (previous revision, new revision, compare).
I came up with following solution. It uses the fact that either minimal summand in the partition or ammount of summands is not too big. Let arrange the summands in the partition in the non decreasing order. Denote f(i, j) — number of partitions of number i if the minimal summand is j, g(i, j) — number of partitions of number i if the amount of summands is j. Then f(i, j) = f(i - j, j) + f(i, j + 1) (we either put j as a new summand or increase the minimal summand), g(i, j) = g(i - 1, j - 1) + g(i - j, j) (we either put 1 as a new summand or we will have all the summands are greater than 1 then decrease all of them by 1 and return to the state when all the summands are greater or equal than 1). Let p be such number that (p - 1) * (p - 1) ≤ n, p * p > n. Let s = p - 1. We compute values of g(i, j) for all i = 1...n, j = 1...s. Then lets calculate values of f(i, p) for all i = 1...n. Iterate through the number of summand here and express it through the fungtion g: . Then we can calculate values of f(i, j) for all i = 1...n, j = 1...s. Time and space complexity are . It seems pretty amazing to me that there is such a solution while before I encountered with such a problem and didn't know that it's possible to solve it with such complexity. Is it known that we can solve this problem with such complexity or better?
You can also compute it using pentagonal numbers in . It's a bit easier to implemenent, but much less intuitive than your solution.
bciobanu I have read that before. And I can't understand why it works. Thanks for pointing me that it's easier to implement, I will trying to understand it.
Thank you ABalobanov for your solution. And seems your solution surely will pass the time limit.
On the OEIS page, the formula involving A001318 looks like it yields an solution if addition and subtraction are O(1) (e.g., modulo an integer).
Edit: this is essentially the same as bciobanu's comment above.