use crate::integer::Integer;
use crate::integer_polynomial::IntegerPolynomial;
use alloc::vec::Vec;
use malachite_base::num::arithmetic::traits::{Mod, Pow};
use malachite_base::num::basic::traits::Zero;
use malachite_base::num::conversion::traits::ExactFrom;
pub fn evaluate_naive(p: &IntegerPolynomial, x: &Integer) -> Integer {
let mut sum = Integer::ZERO;
for (i, c) in p.coefficients_asc().iter().enumerate() {
sum += c * x.pow(u64::exact_from(i));
}
sum
}
pub fn mod_evaluate_u64_naive(p: &IntegerPolynomial, x: u64, m: u64) -> u64 {
u64::exact_from(&evaluate_naive(p, &Integer::from(x)).mod_op(Integer::from(m)))
}
pub fn evaluate_many_naive(p: &IntegerPolynomial, xs: &[Integer]) -> Vec<Integer> {
xs.iter().map(|x| evaluate_naive(p, x)).collect()
}