@@ -12,8 +12,8 @@ function is_power(a::PolyRingElem, n::Int)
1212 fl, x = is_power (leading_coefficient (a), n)
1313 fl || return false , a
1414 f = factor (a)
15- all (i -> i % n == 0 , values (f . fac) ) || return false , a
16- return true , x* prod (p^ div (k, n) for (p, k) = f. fac )
15+ all (i % n == 0 for (_, i) in f ) || return false , a
16+ return true , x* prod (p^ div (k, n) for (p, k) = f)
1717end
1818
1919# ###############################################################################
3131function factor (R:: Ring , f:: Union{FracElem, Rational} )
3232 fn = factor (R (numerator (f)))
3333 fd = factor (R (denominator (f)))
34- fn. unit = divexact (fn. unit, fd. unit)
35- for (k,v) = fd. fac
36- if Base. haskey (fn. fac, k)
37- fn. fac[k] -= v
34+ un = divexact (unit (fn), unit (fd))
35+ fndc = Dict {elem_type(R), Int} (p => e for (p, e) in fn)
36+ for (k, v) = fd
37+ if Base. haskey (fndc, k)
38+ fndc[k] -= v
3839 else
39- fn . fac [k] = - v
40+ fndc [k] = - v
4041 end
4142 end
42- return fn
43+ return Fac (un, sort! ( collect (fndc); by = x -> pretty_sort (x[ 1 ])))
4344end
4445
4546# ###############################################################################
0 commit comments