fn is_prime(n : i32) -> bool {
if n == 2 {
return true;
}
if n < 2 || n % 2 == 0 {
return false;
}
{
let mut i : i32 = 3;
while i * i <= n {
if n % i == 0 {
return false;
}
i += 2 as i32;
}
}
return true;
}
fn cyclically_rotate_left(n : i32) -> i32 {
let mut m : i32 = n;
let mut p : i32 = 1;
while m >= 10 {
p *= 10 as i32;
m /= 10 as i32;
}
return (m + 10 * (n % p)) as i32;
}
fn is_circular_prime(n : i32) -> bool {
if !is_prime(n) {
return false;
}
let mut rotated_n : i32 = cyclically_rotate_left(n);
while rotated_n != n {
if rotated_n < n || !is_prime(rotated_n) {
return false;
}
rotated_n = cyclically_rotate_left(rotated_n);
}
return true;
}
fn main() {
let mut n : i32 = 2;
{
let mut i : i32 = 0;
while i < 18 {
if is_circular_prime(n) {
if i > 0 {
print!("{}",", ".to_string());
}
print!("{}", n);
i += 1;
}
n += 1;
}
}
}
/*
run:
2, 3, 5, 7, 11, 13, 17, 37, 79, 113, 197, 199, 337, 1193, 3779, 11939, 19937, 193939
*/