Skip to content

Commit 985f389

Browse files
committed
Removed num dependency and isqrt
1 parent 48c666b commit 985f389

File tree

2 files changed

+25
-46
lines changed

2 files changed

+25
-46
lines changed

Cargo.toml

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "primes"
4-
version = "0.1.6"
4+
version = "0.1.7"
55
authors = ["Wendell Smith <wendellwsmith@gmail.com>"]
66
license="BSD-3-Clause"
77

@@ -16,7 +16,4 @@ readme="README.md"
1616

1717
documentation = "https://wackywendell.github.io/primes/"
1818
homepage = "https://github.com/wackywendell/primes/tree/master"
19-
repository = "https://github.com/wackywendell/primes/tree/master"
20-
21-
[dependencies]
22-
num = "^0.1.24"
19+
repository = "https://github.com/wackywendell/primes/tree/master"

src/lib.rs

+23-41
Original file line numberDiff line numberDiff line change
@@ -70,30 +70,14 @@ case, but slower in the long term as they do not use any caching of primes.
7070
#[warn(missing_docs)]
7171

7272
extern crate test;
73-
extern crate num;
7473

7574
use std::ops::Index;
7675
use std::slice;
7776
use std::cmp::Ordering::{Equal,Less,Greater};
78-
use num::{Float,NumCast};
7977

8078
#[cfg(test)]
8179
use test::Bencher;
8280

83-
/// Equivalent to floor(sqrt(n)), but takes an integer and returns an integer
84-
fn sqrt_floor<T: NumCast>(n : T) -> T {
85-
let n64 : f64 = NumCast::from(n).unwrap();
86-
let rt = n64.sqrt().floor();
87-
NumCast::from(rt).unwrap()
88-
}
89-
90-
/// Equivalent to floor(sqrt(n)), but takes an integer and returns an integer
91-
fn sqrt_ceil<T: NumCast>(n : T) -> T {
92-
let n64 : f64 = NumCast::from(n).unwrap();
93-
let rt = n64.sqrt().ceil();
94-
NumCast::from(rt).unwrap()
95-
}
96-
9781
/** A prime generator, using the Sieve of Eratosthenes.
9882
9983
Create with `let mut pset = PrimeSet::new()`, and then use `pset.iter()` to iterate over all primes.
@@ -188,7 +172,7 @@ impl PrimeSet {
188172
if n % m == 0 {return false;};
189173
if m*m > n {return true;};
190174
}
191-
panic!("This iterator should not be empty.");
175+
unreachable!("This iterator should not be empty.");
192176
}
193177

194178
/// Find the next largest prime from a number, if it is within the already-found list
@@ -315,30 +299,6 @@ pub fn is_prime(n : u64) -> bool {
315299
firstfac(n) == n
316300
}
317301

318-
#[test]
319-
fn test_sqrts(){
320-
assert_eq!(sqrt_ceil(0), 0);
321-
assert_eq!(sqrt_floor(0), 0);
322-
323-
assert_eq!(sqrt_ceil(1), 1);
324-
assert_eq!(sqrt_floor(1), 1);
325-
326-
let rts = [2u64,3,5,7,11,13,17,19,23, 8734, 809832, 7433154, 1 << 26 - 1];
327-
for &rt in rts.iter() {
328-
let sq = rt * rt;
329-
println!("rt: {}, n: {}", rt, sq);
330-
331-
assert_eq!(sqrt_ceil(sq), rt);
332-
assert_eq!(sqrt_floor(sq), rt);
333-
334-
assert_eq!(sqrt_ceil(sq-1), rt);
335-
assert_eq!(sqrt_floor(sq-1), rt-1);
336-
337-
assert_eq!(sqrt_ceil(sq+1), rt+1);
338-
assert_eq!(sqrt_floor(sq+1), rt);
339-
}
340-
}
341-
342302
#[test]
343303
fn test_iter(){
344304
let mut pset = PrimeSet::new();
@@ -395,6 +355,28 @@ fn test_primes(){
395355
assert!(!is_prime(9));
396356
assert!(pset.is_prime(5));
397357
assert!(is_prime(5));
358+
359+
assert!(pset.is_prime(954377));
360+
assert!(pset.is_prime(954379));
361+
assert!(!pset.is_prime(954377*954379));
362+
363+
assert!(!is_prime(18409199*18409201));
364+
assert!(pset.is_prime(18409199));
365+
assert!(pset.is_prime(18409201));
366+
367+
assert!(!pset.is_prime(2147483643));
368+
assert!(pset.is_prime(2147483647));
369+
assert!(!pset.is_prime(2147483649));
370+
assert!(!pset.is_prime(63061493));
371+
assert!(!pset.is_prime(63061491));
372+
assert!(pset.is_prime(63061489));
373+
assert!(!pset.is_prime(63061487));
374+
assert!(!pset.is_prime(63061485));
375+
assert!(pset.is_prime(2147483647));
376+
assert!(pset.is_prime(63061489));
377+
assert!(!is_prime(63061489 * 2147483647));
378+
assert!(!is_prime(63061489 * 63061489));
379+
// assert!(!is_prime(2147483647 * 2147483647)); // Runs very long
398380
}
399381

400382
#[test]

0 commit comments

Comments
 (0)