in lattices/lattice_utils.cpp [18:41]
point_list_t sum_of_sq (float total, int v, int n, float add) {
if (total < 0) {
return point_list_t();
} else if (n == 1) {
while (sqr(v + add) > total) v--;
if (sqr(v + add) == total) {
return point_list_t(1, v + add);
} else {
return point_list_t();
}
} else {
point_list_t res;
while (v >= 0) {
point_list_t sub_points = sum_of_sq (total - sqr(v + add), v, n - 1, add);
for (size_t i = 0; i < sub_points.size(); i += n - 1) {
res.push_back (v + add);
for (int j = 0; j < n - 1; j++)
res.push_back(sub_points[i + j]);
}
v--;
}
return res;
}
}