/*
Copyright (C) 2014 Jean-Pierre Flori
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
#include
#include
#include "flint.h"
#include "nmod_poly.h"
int nmod_poly_fprint_pretty(FILE * f, const nmod_poly_t a, const char * x)
{
size_t r;
slong i;
if (a->length == 0)
{
r = fputc('0', f);
r = ((int) r != EOF) ? 1 : EOF;
return r;
}
else if (a->length == 1)
{
r = flint_fprintf(f, "%wu", a->coeffs[0]);
return r;
}
i = a->length - 1;
r = 1;
if (i == 1)
{
switch (a->coeffs[1])
{
case UWORD(0):
break;
case UWORD(1):
r = flint_fprintf(f, "%s", x);
break;
default:
r = flint_fprintf(f, "%wu*%s", a->coeffs[1], x);
}
--i;
}
else
{
switch (a->coeffs[i])
{
case UWORD(0):
break;
case UWORD(1):
r = flint_fprintf(f, "%s^%wd", x, i);
break;
default:
r = flint_fprintf(f, "%wu*%s^%wd", a->coeffs[i], x, i);
}
--i;
}
for (; (r > 0) && (i > 1); --i)
{
switch (a->coeffs[i])
{
case UWORD(0):
break;
case UWORD(1):
r = flint_fprintf(f, "+%s^%wd", x, i);
break;
default:
r = flint_fprintf(f, "+%wu*%s^%wd", a->coeffs[i], x, i);
}
}
if (r > 0 && i == 1)
{
switch (a->coeffs[1])
{
case UWORD(0):
break;
case UWORD(1):
r = flint_fprintf(f, "+%s", x);
break;
default:
r = flint_fprintf(f, "+%wu*%s", a->coeffs[1], x);
}
}
if (r > 0)
{
if (a->coeffs[0] != UWORD(0))
r = flint_fprintf(f, "+%wu", a->coeffs[0]);
}
return (int) r;
}