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
*/