From b956e632e1d46c08500e759861462608272c5a87 Mon Sep 17 00:00:00 2001 From: nicoo Date: Tue, 16 Jun 2020 02:29:22 +0200 Subject: [PATCH] factor::table: Coalesce accesses to the `factors` table ~5.6% faster --- src/uu/factor/src/table.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/uu/factor/src/table.rs b/src/uu/factor/src/table.rs index e11b7198b..9d18c9d27 100644 --- a/src/uu/factor/src/table.rs +++ b/src/uu/factor/src/table.rs @@ -26,14 +26,18 @@ pub(crate) fn factor(mut num: u64) -> (Factors, u64) { // if (num * inv) mod 2^64 <= ceil, then prime divides num // See https://math.stackexchange.com/questions/1251327/ // for a nice explanation. + let mut k = 0; loop { let Wrapping(x) = Wrapping(num) * Wrapping(inv); // While prime divides num if x <= ceil { num = x; - factors.push(prime); + k += 1; } else { + if k > 0 { + factors.add(prime, k); + } break; } }