use crate::gaussian_integer::GaussianInteger;
use malachite_base::num::arithmetic::traits::{MulAddMul, MulSubMul};
use malachite_base::num::basic::traits::{One, Zero};
pub fn gaussian_integer_mul_naive(x: &GaussianInteger, y: &GaussianInteger) -> GaussianInteger {
GaussianInteger {
real: (&x.real).mul_sub_mul(&y.real, &x.imaginary, &y.imaginary),
imaginary: (&x.real).mul_add_mul(&y.imaginary, &x.imaginary, &y.real),
}
}
pub fn gaussian_integer_product_naive<I: Iterator<Item = GaussianInteger>>(
xs: I,
) -> GaussianInteger {
let mut p = GaussianInteger::ONE;
for x in xs {
if x == 0u32 {
return GaussianInteger::ZERO;
}
p *= x;
}
p
}