1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-29 20:17:45 +00:00

factor::table: Coalesce accesses to the factors table

~5.6% faster
This commit is contained in:
nicoo 2020-06-16 02:29:22 +02:00
parent c97c98bd2b
commit b956e632e1

View file

@ -26,14 +26,18 @@ pub(crate) fn factor(mut num: u64) -> (Factors, u64) {
// if (num * inv) mod 2^64 <= ceil, then prime divides num // if (num * inv) mod 2^64 <= ceil, then prime divides num
// See https://math.stackexchange.com/questions/1251327/ // See https://math.stackexchange.com/questions/1251327/
// for a nice explanation. // for a nice explanation.
let mut k = 0;
loop { loop {
let Wrapping(x) = Wrapping(num) * Wrapping(inv); let Wrapping(x) = Wrapping(num) * Wrapping(inv);
// While prime divides num // While prime divides num
if x <= ceil { if x <= ceil {
num = x; num = x;
factors.push(prime); k += 1;
} else { } else {
if k > 0 {
factors.add(prime, k);
}
break; break;
} }
} }