Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
56
Task/Semiprime/Rust/semiprime-1.rust
Normal file
56
Task/Semiprime/Rust/semiprime-1.rust
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
extern crate primal;
|
||||
|
||||
fn isqrt(n: usize) -> usize {
|
||||
(n as f64).sqrt() as usize
|
||||
}
|
||||
|
||||
fn is_semiprime(mut n: usize) -> bool {
|
||||
let root = isqrt(n) + 1;
|
||||
let primes1 = primal::Sieve::new(root);
|
||||
let mut count = 0;
|
||||
|
||||
for i in primes1.primes_from(2).take_while(|&x| x < root) {
|
||||
while n % i == 0 {
|
||||
n /= i;
|
||||
count += 1;
|
||||
}
|
||||
if n == 1 {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if n != 1 {
|
||||
count += 1;
|
||||
}
|
||||
count == 2
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test1() {
|
||||
assert_eq!((2..10).filter(|&n| is_semiprime(n)).count(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test2() {
|
||||
assert_eq!((2..100).filter(|&n| is_semiprime(n)).count(), 34);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test3() {
|
||||
assert_eq!((2..1_000).filter(|&n| is_semiprime(n)).count(), 299);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test4() {
|
||||
assert_eq!((2..10_000).filter(|&n| is_semiprime(n)).count(), 2_625);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test5() {
|
||||
assert_eq!((2..100_000).filter(|&n| is_semiprime(n)).count(), 23_378);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test6() {
|
||||
assert_eq!((2..1_000_000).filter(|&n| is_semiprime(n)).count(), 210_035);
|
||||
}
|
||||
12
Task/Semiprime/Rust/semiprime-2.rust
Normal file
12
Task/Semiprime/Rust/semiprime-2.rust
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue