point_list_t sum_of_sq()

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;
    }
}