Thank you for these useful comments. I just wanted to mention, there is a considerable improvement in creating the set of divisors from the factorization of an integer, see below. No more raising primes to some power. Regards, Marko lst divisors(numeric n) { if (n==1) return {1}; lst pfact = factorizeposint(n), ent; numeric tau(1); lst::const_iterator it; for(it = pfact.begin(); it != pfact.end(); ++it){ ent = ex_to<lst>(*it); tau *= numeric(1)+ex_to<numeric>(ent.op(1)); } exvector res {}; res.resize(tau.to_int(), numeric(1)); int sofar = 1; int pos; for(it = pfact.begin(); it != pfact.end(); ++it){ pos = sofar; ent = ex_to<lst>(*it); numeric p = ex_to<numeric>(ent.op(0)); numeric v = ex_to<numeric>(ent.op(1)); for(numeric vv(1); vv <= v; vv++){ for(int q = 0; q < sofar; q++){ res[pos] = res[pos-sofar]*p; pos++; } } sofar = pos; } lst result = {}; for(pos=0; pos<sofar; pos++) result.append(res[pos]); return result; } Am 22.02.23 um 10:26 schrieb Vladimir V. Kisil:
Dear Marko,
GiNaC is a library build on top of other libraries: numeric CLN which is development of GNU GMP. Factorisation of integer is not in the proper domain of GiNaC itself, it is rather a GMP task.
Did you checked what is written here:
https://gmplib.org/manual/Demonstration-Programs#index-Factorization-demo
Best wishes, Vladimir