69 lines
1.5 KiB
Rust
69 lines
1.5 KiB
Rust
use primal::{self, Primes, is_prime};
|
|
|
|
fn is_truncatable_primes(n: u32) -> bool {
|
|
match n {
|
|
2 => false,
|
|
3 => false,
|
|
5 => false,
|
|
7 => false,
|
|
_ => is_right_truncatable_primes(n) && is_left_truncatable_primes(n),
|
|
}
|
|
}
|
|
#[test]
|
|
fn test_is_truncatable_primes() {
|
|
assert!(is_truncatable_primes(3797));
|
|
}
|
|
fn is_left_truncatable_primes(n: u32) -> bool {
|
|
let mut n = n;
|
|
while n > 0 {
|
|
if is_prime(n as u64) {
|
|
n /= 10;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
true
|
|
}
|
|
#[test]
|
|
fn test_is_left_truncatable_primes() {
|
|
assert!(is_left_truncatable_primes(3797));
|
|
}
|
|
|
|
fn is_right_truncatable_primes(n: u32) -> bool {
|
|
let mut n = n;
|
|
while n > 0 {
|
|
if is_prime(n as u64) {
|
|
let string = &n.to_string()[1..];
|
|
|
|
n = match string.len() {
|
|
0 => {
|
|
return true;
|
|
}
|
|
_ => string.parse().unwrap(),
|
|
}
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
true
|
|
}
|
|
#[test]
|
|
fn test_is_right_truncatable_primes() {
|
|
assert!(is_right_truncatable_primes(3797));
|
|
}
|
|
|
|
fn main() {
|
|
let mut p_vec = Vec::new();
|
|
for prime in Primes::all() {
|
|
if is_truncatable_primes(prime as u32) {
|
|
p_vec.push(prime as u32);
|
|
}
|
|
if p_vec.len() == 11 {
|
|
break;
|
|
}
|
|
}
|
|
let sum = p_vec.iter().sum::<u32>();
|
|
dbg!(p_vec);
|
|
println!("sum: {sum}");
|
|
}
|