/*
Copyright (C) 2015 Kushagra Singh
This file is part of FLINT.
FLINT is free software: you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License (LGPL) as published
by the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version. See .
*/
#include
#include "flint.h"
#include "fmpz.h"
#include "mpn_extras.h"
/* x = (a - b) mod n
Not a normal sub mod function, assumes n is normalized (higest bit set)
and a and b are reduced modulo n
*/
void
fmpz_factor_ecm_submod(mp_ptr x, mp_ptr a, mp_ptr b, mp_ptr n, mp_limb_t n_size)
{
mp_ptr temp;
TMP_INIT;
TMP_START;
temp = TMP_ALLOC(n_size * sizeof(mp_limb_t));
if (mpn_cmp(a, b, n_size) > 0)
mpn_sub_n(x, a, b, n_size);
else
{
mpn_sub_n(temp, n, b, n_size);
mpn_add_n(x, temp, a, n_size);
}
TMP_END;
}