init
This commit is contained in:
43
problems/p35/src/main.rs
Normal file
43
problems/p35/src/main.rs
Normal file
@@ -0,0 +1,43 @@
|
||||
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}");
|
||||
}
|
||||
Reference in New Issue
Block a user