\documentclass{article} \usepackage{open-axiom} \begin{document} \title{\$SPAD/src/algebra ratfact.spad} \author{Patrizia Gianni} \maketitle \begin{abstract} \end{abstract} \eject \tableofcontents \eject \section{package RATFACT RationalFactorize} <>= )abbrev package RATFACT RationalFactorize ++ Author: P. Gianni ++ Date created: ?? ++ Date last updated: December 1993 ++ Factorization of extended polynomials with rational coefficients. ++ This package implements factorization of extended polynomials ++ whose coefficients are rational numbers. It does this by taking the ++ lcm of the coefficients of the polynomial and creating a polynomial ++ with integer coefficients. The algorithm in \spadtype{GaloisGroupFactorizer} is then ++ used to factor the integer polynomial. The result is normalized ++ with respect to the original lcm of the denominators. ++ Keywords: factorization, hensel, rational number I ==> Integer RN ==> Fraction Integer RationalFactorize(RP) : public == private where BP ==> SparseUnivariatePolynomial(I) RP : UnivariatePolynomialCategory RN public ==> with factor : RP -> Factored RP ++ factor(p) factors an extended polynomial p over the rational numbers. factorSquareFree : RP -> Factored RP ++ factorSquareFree(p) factors an extended squareFree ++ polynomial p over the rational numbers. private ==> add import GaloisGroupFactorizer (BP) ParFact ==> Record(irr:BP,pow:I) FinalFact ==> Record(contp:I,factors:List(ParFact)) URNI ==> UnivariatePolynomialCategoryFunctions2(RN,RP,I,BP) UIRN ==> UnivariatePolynomialCategoryFunctions2(I,BP,RN,RP) fUnion ==> Union("nil", "sqfr", "irred", "prime") FFE ==> Record(flg:fUnion, fctr:RP, xpnt:I) factor(p:RP) : Factored(RP) == p = 0 => 0 pden: I := lcm([denom c for c in coefficients p]) pol : RP := pden*p ipol: BP := map(numer,pol)$URNI ffact: FinalFact := henselFact(ipol,false) makeFR(((ffact.contp)/pden)::RP, [["prime",map(coerce,u.irr)$UIRN,u.pow]$FFE for u in ffact.factors]) factorSquareFree(p:RP) : Factored(RP) == p = 0 => 0 pden: I := lcm([denom c for c in coefficients p]) pol : RP := pden*p ipol: BP := map(numer,pol)$URNI ffact: FinalFact := henselFact(ipol,true) makeFR(((ffact.contp)/pden)::RP, [["prime",map(coerce,u.irr)$UIRN,u.pow]$FFE for u in ffact.factors]) @ \section{License} <>= --Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. --All rights reserved. -- --Redistribution and use in source and binary forms, with or without --modification, are permitted provided that the following conditions are --met: -- -- - Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- -- - Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in -- the documentation and/or other materials provided with the -- distribution. -- -- - Neither the name of The Numerical ALgorithms Group Ltd. nor the -- names of its contributors may be used to endorse or promote products -- derived from this software without specific prior written permission. -- --THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS --IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED --TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A --PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER --OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, --EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, --PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR --PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF --LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING --NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS --SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. @ <<*>>= <> <> @ \eject \begin{thebibliography}{99} \bibitem{1} nothing \end{thebibliography} \end{document}