13 lines
446 B
Plaintext
13 lines
446 B
Plaintext
fn is_semiprime(n: usize) -> bool {
|
|
fn iter(x: usize, start: usize, count: usize) -> usize {
|
|
if count > 2 {return count} // 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, count + 1),
|
|
None => if x < 2 { count }
|
|
else { count + 1 }
|
|
}
|
|
}
|
|
iter(n, 2, 0) == 2
|
|
}
|