Ejemplo n.º 1
0
void F_mpzmod_mat_sub(F_mpzmod_mat_t res, F_mpzmod_mat_t mat1, F_mpzmod_mat_t mat2)
{
	for (ulong i = 0; i < mat1->r; i++)
	{
		for (ulong j = 0; j < mat1->c; j++)
		{
			F_mpz_sub(res->rows[i] + j, mat1->rows[i] + j, mat2->rows[i] + j);
			if (F_mpz_sgn(res->rows[i] + j) < 0)
				F_mpz_add(res->rows[i] + j, res->rows[i] + j, mat1->p);
		}
	}
}
Ejemplo n.º 2
0
void _F_mpz_mod_poly_sub(F_mpz_mod_poly_t res, const F_mpz_mod_poly_t pol1, const F_mpz_mod_poly_t pol2)
{
   F_mpz_poly_t p1, p2, r;

   _F_mpz_poly_attach_F_mpz_mod_poly(p1, pol1);
   _F_mpz_poly_attach_F_mpz_mod_poly(p2, pol2);
   _F_mpz_poly_attach_F_mpz_mod_poly(r, res);

   _F_mpz_poly_sub(r, p1, p2);
   for (ulong i = 0; i < r->length; i++)
   {
      if (F_mpz_sgn(r->coeffs + i) < 0)
         F_mpz_add(r->coeffs + i, r->coeffs + i, res->P);
   }
   
   _F_mpz_mod_poly_attach_F_mpz_poly(res, r);
   _F_mpz_mod_poly_normalise(res);
}