module Algebra::PolynomialFactorization
Public Instance Methods
factorize()
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 55 def factorize return Algebra::Factors.new([[zero, 1]]) if zero? fact0 = if ground <= Integer factorize_int elsif defined?(Rational) && ground <= Rational || defined?(Algebra::LocalizedRing) && ground <= Algebra::LocalizedRing factorize_rational elsif defined?(Algebra::ResidueClassRing) && ground <= Algebra::ResidueClassRing if ground.ground <= Integer factorize_modp else factorize_alg end elsif ground <= Algebra::Polynomial require 'algebra/m-polynomial-factor' require 'algebra/polynomial-converter' mp = self.class.convert_to(Algebra::MPolynomial) f = value_on(mp) fact = f.factorize fact.map { |g| g.value_on(self.class) } else raise "(factor) unknown data type : #{self.class}" end fact0.normalize! end
irreducible?()
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 81 def irreducible? factorize.size == 1 end
monic_int(a = lc)
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 28 def monic_int(a = lc) d = deg project(self.class) do |c, n| if n == d ground.unity elsif n < d c * a**(d - 1 - n) else # p [self, d, n]; exit raise end end end
monic_int_rev(a)
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 42 def monic_int_rev(a) d = deg project(self.class) do |c, n| if n == d a elsif n < d c / a**(d - 1 - n) else raise end end end
psqfree?()
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 24 def psqfree? pgcd(derivate).deg <= 0 end
sqfree()
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 14 def sqfree f = self g = gcd(derivate) f / g * g.lc end
sqfree?()
click to toggle source
# File lib/algebra/polynomial-factor.rb, line 20 def sqfree? gcd(derivate).deg <= 0 end