assert total == n
assert collections[0] == collections[1]
+def add_m_dissector(n,m):
+ if n <= 2*m:
+ return None
+ prev = dissections[(n-m, m)]
+ ret = [prev[0][:], prev[1][:]]
+ for i in range(len(ret[0])):
+ ret[0][i] = (ret[0][i][0], ret[0][i][1] + [m])
+ ret[1].append((m, (m,)))
+ return ret
+
def gcd_dissector(n,m):
gcd = fractions.gcd(n,m)
return [[(m, (gcd,) * (n/gcd))],
best = 0
for dissector, this_reason in [
(gcd_dissector, "trivial gcd solution"),
+ (add_m_dissector, "extend solution for (%d,%d)" % (n-m, m)),
]:
dissection = dissector(n, m)
if dissection is None: continue