\begin{ccRefConcept}{PolynomialTraits_d::PolynomialSubresultantsWithCofactors}

\textbf{Note:} This functor is optional!

\ccDefinition

Computes the polynomial subresultant of two polynomials $p$ and $q$ of degree
$n$ and $m$, respectively, 
as defined in the documentation of \ccc{PolynomialTraits_d::PolynomialSubresultants}.
Moreover, for $\mathrm{Sres}_i(p,q)$, polynomials $u_i$ and $v_i$
with $\deg u_i\leq m-i-1$ and $\deg v_i\leq n-i-1$ are computed 
such that $\mathrm{Sres}_i(p,q)=u_i p + v_i q$. $u_i$ and $v_i$ are called
the \emph{cofactors} of $\mathrm{Sres}_i(p,q)$.
 
The result is written in three output ranges, each of length $\min\{n,m\}+1$, 
starting with the $0$-th subresultant and the corresponding cofactors.

\ccRefines 
\ccc{AdaptableBinaryFunction}\\
\ccc{CopyConstructible}\\
\ccc{DefaultConstructible}\\

\ccCreationVariable{fo}
\ccOperations
\ccMethod{template< typename OutputIterator1,
                    typename OutputIterator2,
                    typename OutputIterator3 >
        OutputIterator1 operator()(Polynomial_d   p,
                                   Polynomial_d   q,
                                   OutputIterator1 sres,
                                   OutputIterator2 co_p,
                                   OutputIterator3 co_q);}
         { computes the subresultants of $p$ and $q$, and the cofactors, 
           with respect to the outermost variable. Each element is of type
           \ccc{PolynomialTraits_d::Polynomial_d}.}

\ccMethod{template< typename OutputIterator1,
                    typename OutputIterator2,
                    typename OutputIterator3 >
        OutputIterator1 operator()(Polynomial_d   p,
                                   Polynomial_d   q,
                                   OutputIterator1 sres,
                                   OutputIterator2 co_p,
                                   OutputIterator3 co_q,
                                   int i);}
         { computes the subresultants of $p$ and $q$, and the cofactors, 
           with respect to $x_i$. Each element is of type
           \ccc{PolynomialTraits_d::Polynomial_d}.}

%\ccHasModels

\ccSeeAlso

\ccRefIdfierPage{Polynomial_d}\\
\ccRefIdfierPage{PolynomialTraits_d}\\
\ccRefIdfierPage{PolynomialTraits_d::Resultant}\\
\ccRefIdfierPage{PolynomialTraits_d::PolynomialSubresultants}\\
\ccRefIdfierPage{PolynomialTraits_d::PrincipalSubresultants}\\
\ccRefIdfierPage{PolynomialTraits_d::SturmHabichtSequenceWithCofactors}\\

\end{ccRefConcept}
