use std::str::FromStr; use primal::is_prime; // 有0,2, 4, 5, 6, 8的,必然不是 fn is_circular_prime(num: u32) -> bool { if num == 2 || num == 3 || num == 5 || num == 7 { return true; } let mut str_num = num.to_string(); if str_num.contains("0") || str_num.contains("2") || str_num.contains("4") || str_num.contains("5") || str_num.contains("6") || str_num.contains("8") { return false; } for _ in 0..str_num.len() { let num = u32::from_str(&str_num).unwrap(); if !is_prime(num as u64) { return false; } str_num = str_num[1..str_num.len()].to_string() + &str_num[0..1]; } true } #[test] fn test_is_circular_prime() { assert!(is_circular_prime(2)); assert!(is_circular_prime(5)); assert!(is_circular_prime(13)); assert!(!is_circular_prime(4)); assert!(is_circular_prime(197)); } fn main() { let count = (0..1000000u32).filter(|x| is_circular_prime(*x)).count(); println!("{count}"); }