How to find two prime numbers that, when concatenated, form another prime number in Rust

1 Answer

0 votes
fn is_prime(n: i64) -> bool {
    if n < 2 {
        return false;
    }
    if n % 2 == 0 && n != 2 {
        return false;
    }
    let mut i = 3;
    while i * i <= n {
        if n % i == 0 {
            return false;
        }
        i += 2;
    }
    true
}

fn concat(a: i32, b: i32) -> i64 {
    let s = format!("{}{}", a, b);
    
    s.parse::<i64>().unwrap()
}

fn main() {
    let limit = 12; // you can increase this
    let mut primes: Vec<i32> = Vec::new();

    // Generate primes up to limit
    for i in 2..=limit {
        if is_prime(i as i64) {
            primes.push(i);
        }
    }

    // Check pairs
    for (i_idx, &i_val) in primes.iter().enumerate() {
        for (j_idx, &j_val) in primes.iter().enumerate() {
            if i_idx == j_idx {
                continue; // skip same prime if you want
            }
            let num = concat(i_val, j_val);
            if is_prime(num) {
                println!("{} + {} -> {} is prime", i_val, j_val, num);
            }
        }
    }
}



/*
run:

2 + 3 -> 23 is prime
2 + 11 -> 211 is prime
3 + 7 -> 37 is prime
3 + 11 -> 311 is prime
5 + 3 -> 53 is prime
7 + 3 -> 73 is prime
11 + 3 -> 113 is prime

*/

 



answered Nov 28, 2025 by avibootz
...