aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/pfo.spad.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/algebra/pfo.spad.pamphlet')
-rw-r--r--src/algebra/pfo.spad.pamphlet20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/algebra/pfo.spad.pamphlet b/src/algebra/pfo.spad.pamphlet
index 1b310c40..493a68e4 100644
--- a/src/algebra/pfo.spad.pamphlet
+++ b/src/algebra/pfo.spad.pamphlet
@@ -499,15 +499,24 @@ PointsOfFiniteOrder(R0, F, UP, UPUP, R): Exports == Implementation where
selIntegers():RC0 ==
f := definingPolynomial()$R
- while zero?(d := doubleDisc(r := polyred pmod f)) repeat newReduc()$q
- [r, d]
+ repeat
+ r := polyred pmod f
+ d := doubleDisc r
+ if zero? d then
+ newReduc()$q
+ else
+ return [r,d]
selectIntegers(k:K):REC ==
g := polyred(f := definingPolynomial()$R)
p := minPoly k
- while zero?(d := doubleDisc(r := kpmod(g, k))) or (notIrr? fmod p)
- repeat newReduc()$q
- [r, d, splitDenominator(fmod p).num]
+ repeat
+ r := kpmod(g, k)
+ d := doubleDisc r
+ if zero? d or notIrr? fmod p then
+ newReduc()$q
+ else
+ return [r, d, splitDenominator(fmod p).num]
toQ1(p, d) ==
map(Q2F(retract(#1 rem d)@Q),
@@ -528,6 +537,7 @@ PointsOfFiniteOrder(R0, F, UP, UPUP, R): Exports == Implementation where
kgetGoodPrime(rec, res, h, b, d) ==
p:PI := 3
+ u : Union(UPQ, "failed")
while (u := goodRed(rec, res, h, b, d, p)) case "failed" repeat
p := nextPrime(p::Z)::PI
[p, u::UPQ]