Coin de Gamma
11 months ago
1 changed files with 64 additions and 0 deletions
@ -0,0 +1,64 @@
|
||||
use std::collections::HashSet; |
||||
|
||||
fn er() -> HashSet<u32> { |
||||
let mut nums = Vec::new(); |
||||
let size = 1_000_000; |
||||
for n in 0..size+1 { nums.push(true); } |
||||
let mut p = 1; |
||||
while true { |
||||
let mut found = false; |
||||
for i in p+1..size { |
||||
if nums[i] { |
||||
found = true; |
||||
p = i; |
||||
break; |
||||
} |
||||
} |
||||
if !found { break; } |
||||
for i in (2 * p .. size).step_by(p) { |
||||
nums[i] = false; |
||||
} |
||||
} |
||||
let mut res = HashSet::new(); |
||||
for i in 2..size { |
||||
if nums[i] { res.insert(i as u32); } |
||||
} |
||||
return res; |
||||
} |
||||
|
||||
fn trl(n: u32) -> u32 { |
||||
let s = n.to_string(); |
||||
let mut chars = s.chars(); |
||||
let f = chars.next().unwrap(); |
||||
//chars.next_back();
|
||||
let mut res = String::from(chars.as_str()); |
||||
res.parse::<u32>().unwrap() |
||||
} |
||||
|
||||
fn test(p: u32, hs: &HashSet<u32>) -> bool { |
||||
let mut tl = p; |
||||
while tl > 10 { |
||||
if !hs.contains(&tl) { return false; } |
||||
tl = trl(tl); |
||||
} |
||||
if !hs.contains(&tl) { return false; } |
||||
let mut tr = p; |
||||
while tr > 0 { |
||||
if !hs.contains(&tr) { return false; } |
||||
tr /= 10; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
fn main() { |
||||
let hs = er(); |
||||
let mut sum = 0; |
||||
for p in hs.iter() { |
||||
if *p < 10 { continue; } |
||||
if test(*p, &hs) { |
||||
println!("{}", p); |
||||
sum += p; |
||||
} |
||||
} |
||||
println!("sum: {}", sum); |
||||
} |
Loading…
Reference in new issue