Cofactor canonicalisation of mpn_gcdext

Niels Möller nisse at
Mon Nov 23 14:23:22 CET 2009

abbott <abbott at> writes:

> I didn't know it either but it can be proved,
> see Theorem 4.3(vi) page 78 in Shoup's book:

It almost spells out the result we're talking about. Part (v) says, in
our notation:

   |t| <= u / r_{\lambda-1}, |s| <= v / r_{\lambda-1}


  r_{\lambda-1} = r_\lambda q_\lambda = g q_\lambda

is the last-but-one nonzero remainder in the remainder sequence.

So equality, |t| = u / g or |s| = v/g, is not ruled out, as far as I
see. When does that happen, and which border is hit? When v/g is even,
one could choose between the ranges

  -v/g <= 2s <= v/g - 2


  -v/g + 2 <= 2s <= v/g
Which range does the values returned by Euclid's algorithm fit in?
Does it matter in the context of GMP?

For which inputs can we really require that 2 |s| < v/g, with *strict*


More information about the gmp-devel mailing list