Semiprime: Difference between revisions

m (→‎{{header|C sharp|C#}}: fixed lang tag for syntax hi-lighting)
Line 2,663:
assert_eq!((2..1_000_000).filter(|&n| is_semiprime(n)).count(), 210_035);
}</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}}
<pre>
51

edits