use crate::Solution;
use pmath::gcd;
problem!(Problem0075, 75, "Singular Integer Right Triangles");
impl Solution for Problem0075 {
fn solve(&self) -> String {
const L_MAX: u32 = 1_500_000;
let mut array = vec![0; L_MAX as usize + 1];
let upper_m = ((L_MAX / 2) as f64).sqrt().ceil() as u32;
for m in 1..upper_m {
for n in 1..m {
let l = 2 * m * (m + n); if l > L_MAX {
break;
}
if gcd(m, n) == 1 && (m + n) % 2 == 1 {
let mut current_l = l;
while current_l <= L_MAX {
array[current_l as usize] += 1;
current_l += l;
}
}
}
}
array.into_iter().filter(|&x| x == 1).count().to_string()
}
}