Следующие два предложения основаны на повторении делений до тех пор, пока больше не будет сделано (они оба очень похожи).
Предложение 1:
r(f)={my(c); while(c=polcyclofactors(f); #c, f=f/vecprod(c)); f}
Предложение 2:
r(f)={my(g=vecprod(polcyclofactors(f))); while(poldegree(g), f=f/g; g=gcd(f,g)); f}
Еще одно предложение без цикла:
r(f)={my(g=vecprod(polcyclofactors(f))); numerator(f/g^(poldegree(f)))}
Теперь версия, которая, вероятно, лучше: для каждого фактора valuation
может использоваться для получения требуемой мощности.
r(f)={f/vecprod([t^valuation(f,t) | t<-polcyclofactors(f)])}