@@ -23,7 +23,6 @@ extern crate std;
23
23
extern crate num_traits as traits;
24
24
25
25
use core:: ops:: Add ;
26
- use core:: mem;
27
26
28
27
use traits:: { Num , Signed } ;
29
28
@@ -275,16 +274,20 @@ macro_rules! impl_integer_for_isize {
275
274
n = n. abs( ) ;
276
275
277
276
// divide n and m by 2 until odd
278
- // m inside loop
279
277
n >>= n. trailing_zeros( ) ;
280
-
281
- while m != 0 {
282
- m >>= m. trailing_zeros( ) ;
283
- if n > m { mem:: swap( & mut n, & mut m) }
284
- m -= n;
278
+ m >>= m. trailing_zeros( ) ;
279
+
280
+ loop {
281
+ if m > n {
282
+ m -= n;
283
+ if m == 0 { return n << shift; }
284
+ m >>= m. trailing_zeros( ) ;
285
+ } else {
286
+ n -= m;
287
+ if n == 0 { return m << shift; }
288
+ n >>= n. trailing_zeros( ) ;
289
+ }
285
290
}
286
-
287
- n << shift
288
291
}
289
292
290
293
/// Calculates the Lowest Common Multiple (LCM) of the number and
@@ -537,16 +540,20 @@ macro_rules! impl_integer_for_usize {
537
540
let shift = ( m | n) . trailing_zeros( ) ;
538
541
539
542
// divide n and m by 2 until odd
540
- // m inside loop
541
543
n >>= n. trailing_zeros( ) ;
542
-
543
- while m != 0 {
544
- m >>= m. trailing_zeros( ) ;
545
- if n > m { mem:: swap( & mut n, & mut m) }
546
- m -= n;
544
+ m >>= m. trailing_zeros( ) ;
545
+
546
+ loop {
547
+ if m > n {
548
+ m -= n;
549
+ if m == 0 { return n << shift; }
550
+ m >>= m. trailing_zeros( ) ;
551
+ } else {
552
+ n -= m;
553
+ if n == 0 { return m << shift; }
554
+ n >>= n. trailing_zeros( ) ;
555
+ }
547
556
}
548
-
549
- n << shift
550
557
}
551
558
552
559
/// Calculates the Lowest Common Multiple (LCM) of the number and `other`.
0 commit comments