The complete factor() patch was sent to Richy. Should the divisors be sorted? Do we leave that to the client? Can someone tell me why gcc barfs when I declare f const? vector<cl_I> divisors(const cl_I& n) { cl_FEV f = factor(n); vector<long> v(f.size()); vector<cl_I> res; res.push_back(1); while (true) { vector<long>::iterator vit = v.begin(); cl_FEV::iterator fit = f.begin(); while (*vit == (*fit)->exp) { *vit = 0; if (++vit == v.end()) return res; ++fit; } cl_I prod = expt_pos((*fit)->fact, ++(*vit)); ++vit; ++fit; while (vit != v.end()) { if (*vit > 0) prod = prod * expt_pos((*fit)->fact, *vit); ++vit; ++fit; } res.push_back(prod); } } ralf