Exemplo n.º 1
0
Polynomial<Type> operator*(const Polynomial<Type> &x, const Polynomial<Type> &y)
{
    Polynomial<Type> result; result.resize(x.size() + y.size() - 1);
    for(size_t f = 0; f < x.size(); ++ f)
        for(size_t s = 0; s < y.size(); ++ s)
            result[f + s] = result[f + s] + x[f] * y[s];

    return result;
}
Exemplo n.º 2
0
Polynomial readPolynomial() {
  int n;
  Polynomial ret;

  scanf("%d", &n);
  ret.resize(n + 1);
  for (int i = n; i >= 0; --i) {
    scanf("%d", &ret[i]);
  }

  return ret;
}
Exemplo n.º 3
0
inline Polynomial<eT>
gcd(const Polynomial<eT>& x, const Polynomial<eT>& y)
{
    Polynomial<eT> r;
    Polynomial<eT> u;
    Polynomial<eT> v;

    const int xdeg = x.degree();
    const int ydeg = y.degree();

    if(xdeg < 0 || ydeg < 0)
        return std::move(u);

    if((xdeg == 0 && x[0] == 0) || (ydeg == 0 && y[0] == 0))
    {
        u.resize(1);
        u[0] = eT(0);
        return std::move(u);
    }

    const bool maxo = (xdeg >= ydeg);
    u = maxo ? x : y;
    v = maxo ? y : x;

    while(1)
    {
        r = u % v;
        u = v;
        v = r;
        if(v.degree() == 0 && v[0] == 0)
            break;
    }

    if(u.degree() == 0) //x and y are co-primes
        u[0] = eT(1);
    return std::move(u);
}