Skip to content

Instantly share code, notes, and snippets.

@fredrik-johansson
Last active August 29, 2015 13:59
Show Gist options
  • Save fredrik-johansson/10761192 to your computer and use it in GitHub Desktop.
Save fredrik-johansson/10761192 to your computer and use it in GitHub Desktop.
Most beautiful C indent style
void _nmod_poly_powmod_mpz_binexp(mp_ptr res, mp_srcptr poly,
mpz_srcptr e, mp_srcptr f,
slong lenf, nmod_t mod) {
mp_ptr T, Q ;
slong lenT, lenQ ;
slong i ;
if (lenf == 2) {
res[0] = n_powmod2_mpz(poly[0], e, mod.n, mod.ninv) ;
return ;}
lenT = 2 * lenf - 3 ;
lenQ = lenT - lenf + 1 ;
T = _nmod_vec_init(lenT + lenQ) ;
Q = T + lenT ;
_nmod_vec_set(res, poly, lenf - 1) ;
for (i = mpz_sizeinbase(e, 2) - 2; i >= 0; i--) {
_nmod_poly_mul(T, res, lenf - 1, res, lenf - 1, mod) ;
_nmod_poly_divrem(Q, res, T, 2 * lenf - 3, f, lenf, mod) ;
if (mpz_tstbit(e, i)) {
_nmod_poly_mul(T, res, lenf - 1, poly, lenf - 1, mod) ;
_nmod_poly_divrem(Q, res, T, 2 * lenf - 3, f, lenf, mod) ;}}
_nmod_vec_clear(T) ;}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment