The marks of the denominators of the fast search #
The fast search finds its denominators by marks in byte arrays (Ratpoints.Fast.denominators), and
Ratpoints.Fast.collectMarked lists the marked ones in ascending order
(Ratpoints.Fast.collectMarked_eq_filter). For even degree, Ratpoints.Fast.forbiddenDens marks
only multiples of an odd q with J(c_d | q) = -1
(Ratpoints.Fast.exists_dvd_of_getElem!_forbiddenDens_ne_zero): it marks the multiples of p
when Ratpoints.Fast.jacobiNat gives -1, which it gives only for J(c_d | p) = -1
(Ratpoints.Fast.jacobiNatAux_eq_zero_or_eq, Ratpoints.Fast.jacobiNat_eq_zero_or_eq); that p
is a prime, as the sieve of Eratosthenes makes it, is not needed. For odd degree,
Ratpoints.Fast.squareDens n hi marks every s k ^ 2 ≤ hi with s dividing n ≠ 0 and k ≥ 1
(Ratpoints.Fast.getElem!_squareDens).
Main statements #
Ratpoints.Fast.collectMarked_eq_filter: the marked numbers in ascending order.Ratpoints.Fast.exists_dvd_of_getElem!_forbiddenDens_ne_zero: what a mark ofRatpoints.Fast.forbiddenDensmeans.Ratpoints.Fast.getElem!_squareDens: the marks ofRatpoints.Fast.squareDens.
Marked numbers #
The Jacobi symbol #
Ratpoints.Fast.jacobiNatAux computes s J(a | n) for odd n, or gives up with 0.
The denominators of even degree #
The invariant of the loop of Ratpoints.Fast.forbiddenDensFrom: every marked denominator is
a multiple of an odd q with J(lc | q) = -1; that q is a prime, as the sieve of Eratosthenes
makes it, is not needed.