6 """Partitions numbers into M subsets using Largest-First Decreasing (LFD)."""
8 [(arr.flat[i], i)
for i
in range(arr.size)], reverse=
True, key=
lambda v: v[0]
10 sums = np.zeros((n_part,), dtype=np.float64)
13 partitions = np.zeros_like(arr, dtype=np.int64)
15 for num, i
in numbers:
18 partitions.flat[i] = idx
26 factors = sympy.factorint(N)
28 for f, p
in factors.items():
29 factor_list += [f] * p
30 factor_list = np.array(factor_list, dtype=np.int64)
31 assert factor_list.prod() == N
33 np.log2((factor_list * 2).astype(np.float64)), n_part
36 [np.prod(factor_list[partition == i])
for i
in range(n_part)], dtype=np.int64
38 assert prods.prod() == N
42if __name__ ==
"__main__":
44 for i
in np.arange(2, 201) * 64:
46 diffv = prods.max() - prods.min()
47 if diffv > np.sqrt(i) * 0:
48 print(f
"{i:6}: {str(prods):32}: {diffv}")
51 arr = np.array([1, 3, 5, 7, 9, 11])
56 index = np.searchsorted(arr, target, side=
"right") - 1
int_factor_divide(int N, int n_part=2)
sum_partition_greedy(np.ndarray arr, int n_part=2)