@@ -70,30 +70,14 @@ case, but slower in the long term as they do not use any caching of primes.
70
70
#[ warn( missing_docs) ]
71
71
72
72
extern crate test;
73
- extern crate num;
74
73
75
74
use std:: ops:: Index ;
76
75
use std:: slice;
77
76
use std:: cmp:: Ordering :: { Equal , Less , Greater } ;
78
- use num:: { Float , NumCast } ;
79
77
80
78
#[ cfg( test) ]
81
79
use test:: Bencher ;
82
80
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
-
97
81
/** A prime generator, using the Sieve of Eratosthenes.
98
82
99
83
Create with `let mut pset = PrimeSet::new()`, and then use `pset.iter()` to iterate over all primes.
@@ -188,7 +172,7 @@ impl PrimeSet {
188
172
if n % m == 0 { return false ; } ;
189
173
if m* m > n { return true ; } ;
190
174
}
191
- panic ! ( "This iterator should not be empty." ) ;
175
+ unreachable ! ( "This iterator should not be empty." ) ;
192
176
}
193
177
194
178
/// 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 {
315
299
firstfac ( n) == n
316
300
}
317
301
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
-
342
302
#[ test]
343
303
fn test_iter ( ) {
344
304
let mut pset = PrimeSet :: new ( ) ;
@@ -395,6 +355,28 @@ fn test_primes(){
395
355
assert ! ( !is_prime( 9 ) ) ;
396
356
assert ! ( pset. is_prime( 5 ) ) ;
397
357
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
398
380
}
399
381
400
382
#[ test]
0 commit comments