Semiprime: Difference between revisions
Content deleted Content added
m →{{header|C sharp|C#}}: fixed lang tag for syntax hi-lighting |
|||
Line 2,663: | Line 2,663: | ||
assert_eq!((2..1_000_000).filter(|&n| is_semiprime(n)).count(), 210_035); |
assert_eq!((2..1_000_000).filter(|&n| is_semiprime(n)).count(), 210_035); |
||
}</lang> |
}</lang> |
||
functional version of is_semiprime: |
|||
<lang Rust>fn is_semiprime(n: usize) -> bool { |
|||
fn iter(x: usize, start: usize, acc: &[usize]) -> Vec<usize> { |
|||
if acc.len() > 2 {return acc.to_vec()} // break for semi_prime |
|||
let limit = (x as f64).sqrt().ceil() as usize; |
|||
match (start..=limit).skip_while(|i| x % i > 0).next() { |
|||
Some(v) => iter(x / v, v, &[&[v], acc].concat()), |
|||
None => if x < 2 { acc.to_vec() } |
|||
else { [&[x], acc].concat() } |
|||
} |
|||
} |
|||
iter(n, 2, &[]).len() == 2 |
|||
}</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |