diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/brill.spad.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/algebra/brill.spad.pamphlet')
-rw-r--r-- | src/algebra/brill.spad.pamphlet | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/algebra/brill.spad.pamphlet b/src/algebra/brill.spad.pamphlet new file mode 100644 index 00000000..ae69e86c --- /dev/null +++ b/src/algebra/brill.spad.pamphlet @@ -0,0 +1,161 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/algebra brill.spad} +\author{Frederic Lehobey, James H. Davenport} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{package BRILL BrillhartTests} +<<package BRILL BrillhartTests>>= +)abbrev package BRILL BrillhartTests +++ Author: Frederic Lehobey, James H. Davenport +++ Date Created: 28 June 1994 +++ Date Last Updated: 11 July 1997 +++ Basic Operations: brillhartIrreducible? +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: factorization +++ Examples: +++ References: +++ [1] John Brillhart, Note on Irreducibility Testing, +++ Mathematics of Computation, vol. 35, num. 35, Oct. 1980, 1379-1381 +++ [2] James Davenport, On Brillhart Irreducibility. To appear. +++ [3] John Brillhart, On the Euler and Bernoulli polynomials, +++ J. Reine Angew. Math., v. 234, (1969), pp. 45-64 + +BrillhartTests(UP): Exports == Implementation where + N ==> NonNegativeInteger + Z ==> Integer + UP: UnivariatePolynomialCategory Z + + Exports ==> with + brillhartIrreducible?: UP -> Boolean -- See [1] + ++ brillhartIrreducible?(p) returns \spad{true} if p can be shown to be + ++ irreducible by a remark of Brillhart, \spad{false} is inconclusive. + brillhartIrreducible?: (UP,Boolean) -> Boolean -- See [1] + ++ brillhartIrreducible?(p,noLinears) returns \spad{true} if p can be + ++ shown to be irreducible by a remark of Brillhart, \spad{false} else. + ++ If noLinears is \spad{true}, we are being told p has no linear factors + ++ \spad{false} does not mean that p is reducible. + brillhartTrials: () -> N + ++ brillhartTrials() returns the number of tests in + ++ \spadfun{brillhartIrreducible?}. + brillhartTrials: N -> N + ++ brillhartTrials(n) sets to n the number of tests in + ++ \spadfun{brillhartIrreducible?} and returns the previous value. + noLinearFactor?: UP -> Boolean -- See [3] p. 47 + ++ noLinearFactor?(p) returns \spad{true} if p can be shown to have no + ++ linear factor by a theorem of Lehmer, \spad{false} else. I insist on + ++ the fact that \spad{false} does not mean that p has a linear factor. + + Implementation ==> add + + import GaloisGroupFactorizationUtilities(Z,UP,Float) + + squaredPolynomial(p:UP):Boolean == + d := degree p + d = 0 => true + odd? d => false + squaredPolynomial reductum p + + primeEnough?(n:Z,b:Z):Boolean == + -- checks if n is prime, with the possible exception of + -- factors whose product is at most b + import Float + bb: Float := b::Float + for i in 2..b repeat + while (d:= n exquo i) case Integer repeat + n:=d::Integer + bb:=bb / i::Float + bb < 1$Float => return false + --- we over-divided, so it can't be prime + prime? n + + brillharttrials: N := 6 + brillhartTrials():N == brillharttrials + + brillhartTrials(n:N):N == + (brillharttrials,n) := (n,brillharttrials) + n + + brillhartIrreducible?(p:UP):Boolean == + brillhartIrreducible?(p,noLinearFactor? p) + + brillhartIrreducible?(p:UP,noLinears:Boolean):Boolean == -- See [1] + zero? brillharttrials => false + origBound := (largeEnough := rootBound(p)+1) + -- see remarks 2 and 4 + even0 := even? coefficient(p,0) + even1 := even? p(1) + polyx2 := squaredPolynomial(p) + prime? p(largeEnough) => true + not polyx2 and prime? p(-largeEnough) => true +-- one? brillharttrials => false + (brillharttrials = 1) => false + largeEnough := largeEnough+1 + primeEnough?(p(largeEnough),if noLinears then 4 else 2) => true + not polyx2 and + primeEnough?(p(-largeEnough),if noLinears then 4 else 2) => true + if odd? largeEnough then + if even0 then largeEnough := largeEnough+1 + else + if even1 then largeEnough := largeEnough+1 + count :=(if polyx2 then 2 else 1)*(brillharttrials-2)+largeEnough + for i in (largeEnough+1)..count repeat + small := if noLinears then (i-origBound)**2 else (i-origBound) + primeEnough?(p(i),small) => return true + not polyx2 and primeEnough?(p(-i),small) => return true + false + + noLinearFactor?(p:UP):Boolean == + (odd? leadingCoefficient p) and (odd? coefficient(p,0)) and (odd? p(1)) + +@ +\section{License} +<<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. +@ +<<*>>= +<<license>> + +<<package BRILL BrillhartTests>> +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |