use crate::Rational;
use malachite_base::num::arithmetic::traits::{Mod, Square};
use malachite_base::num::basic::traits::{One, Zero};
use malachite_nz::integer::Integer;
pub fn dedekind_sum_naive(h: &Integer, k: &Integer) -> Rational {
if *k == 0u32 {
return Rational::ZERO;
}
let mut num = Integer::ZERO;
let mut i = Integer::ONE;
while i < *k {
let j = h * &i;
let r2 = j.mod_op(k);
if r2 != 0u32 {
let a = (((&i).mod_op(k)) << 1u32) - k;
let b = (r2 << 1u32) - k;
num += a * b;
}
i += Integer::ONE;
}
Rational::from_integers(num, k.square() << 2u32)
}