Пример #1
0
static void
hgcd_jacobi_hook (void *p, mp_srcptr gp, mp_size_t gn,
                  mp_srcptr qp, mp_size_t qn, int d)
{
    ASSERT (!gp);
    ASSERT (d >= 0);

    MPN_NORMALIZE (qp, qn);
    if (qn > 0)
    {
        struct hgcd_jacobi_ctx *ctx = (struct hgcd_jacobi_ctx *) p;
        /* NOTES: This is a bit ugly. A tp area is passed to
        gcd_subdiv_step, which stores q at the start of that area. We
         now use the rest. */
        mp_ptr tp = (mp_ptr) qp + qn;

        mpn_hgcd_matrix_update_q (ctx->M, qp, qn, d, tp);
        *ctx->bitsp = mpn_jacobi_update (*ctx->bitsp, d, qp[0] & 3);
    }
}
Пример #2
0
static void
jacobi_hook (void *p, mp_srcptr gp, mp_size_t gn,
	     mp_srcptr qp, mp_size_t qn, int d)
{
  unsigned *bitsp = (unsigned *) p;

  if (gp)
    {
      ASSERT (gn > 0);
      if (gn != 1 || gp[0] != 1)
	{
	  *bitsp = BITS_FAIL;
	  return;
	}
    }

  if (qp)
    {
      ASSERT (qn > 0);
      ASSERT (d >= 0);
      *bitsp = mpn_jacobi_update (*bitsp, d, qp[0] & 3);
    }
}