pub fn new(factors: Vec<DenseMultilinearPolynomial<F>>) -> Result<Self, ProverError> {
        if factors.is_empty() {
            return Err(ProverError::FactorMismatch(
                "At least one polynomial factor is required.".to_string(),
            ));
        }
        let num_vars = factors[0].num_vars();
        if factors.iter().any(|p| p.num_vars() != num_vars) {
            return Err(ProverError::FactorMismatch(
                "All factors must have the same number of variables.".to_string(),
            ));
        }
        Ok(Self {
            num_vars,
            factors,
            challenges: Vec::with_capacity(num_vars),
        })
    }
Creates a new Prover instance for the given factors.
crates/provers/sumcheck/src/prover.rs