How to check if an array contains the Pythagorean triplet numbers (a*a+b*b=c*c) in Rust

1 Answer

0 votes
use std::cmp::Ordering;

fn contains_pythagorean_triplet_numbers(arr: &[i32]) -> bool {
    let mut squares: Vec<i32> = arr.iter().map(|&x| x * x).collect();

    squares.sort_unstable(); // built-in sort

    for i in (2..squares.len()).rev() {
        let mut a = 0;
        let mut b = i - 1;

        while a < b {
            match (squares[a] + squares[b]).cmp(&squares[i]) {
                Ordering::Equal => return true,
                Ordering::Less => a += 1,
                Ordering::Greater => b -= 1,
            }
        }
    }

    false
}

fn main() {
    let input = vec![4, 7, 3, 1, 5]; // 3*3 + 4*4 = 5*5 // 9 + 16 = 25
    
    if contains_pythagorean_triplet_numbers(&input) {
        println!("The array contains a Pythagorean triplet.");
    } else {
        println!("The array does not contain a Pythagorean triplet.");
    }
}


    
/*
run:

The array contains a Pythagorean triplet.
   
*/
  
 

 



answered Jul 25, 2025 by avibootz
...