A product-sum number is a natural number N which can be expressed as both the product and the sum of the same set of numbers.
N = a1 × a2 × ... × ak = a1 + a2 + ... + ak
For example, 6 = 1 × 2 × 3 = 1 + 2 + 3.
For a given set of size, k, we shall call the smallest N with this property a minimal product-sum number. The minimal product-sum numbers for sets of size, k = 2, 3, 4, 5, and 6 are as follows.
```
k=2: 4 = 2 × 2 = 2 + 2
k=3: 6 = 1 × 2 × 3 = 1 + 2 + 3
k=4: 8 = 1 × 1 × 2 × 4 = 1 + 1 + 2 + 4
k=5: 8 = 1 × 1 × 2 × 2 × 2 = 1 + 1 + 2 + 2 + 2
k=6: 12 = 1 × 1 × 1 × 1 × 2 × 6 = 1 + 1 + 1 + 1 + 2 + 6
```
Hence for 2 ≤ k ≤ 6, the sum of all the minimal product-sum numbers is 4+6+8+12 = 30; note that 8 is only counted once in the sum.
Your task is to write an algorithm to compute the sum of all minimal product-sum numbers where 2 ≤ k ≤ n.
Courtesy of ProjectEuler.net
maxi = 12001
res = [2*maxi]*maxi
def rec(p, s, c, x):
    k = p - s + c
    if k >= maxi: return
    res[k] = min(p, res[k])
    [rec(p*i, s+i, c+1, i) for i in range(x, 2*maxi//p + 1)]
rec(1, 1, 1, 2)

def productsum(n):
    return sum(set(res[2:n+1]))
maxi = 12001
res = [2*maxi]*maxi
def rec(p, s, c, x):
    k = p - s + c
    if k >= maxi: return
    res[k] = min(p, res[k])
    [rec(p*i, s+i, c+1, i) for i in range(x, 2*maxi//p + 1)]
rec(1, 1, 1, 2)

def productsum(n):
    return sum(set(res[2:n+1]))