From 368f47381b7441ddb23bb7460417e0d1ce33e330 Mon Sep 17 00:00:00 2001 From: Roy Ivy III Date: Thu, 8 Oct 2020 00:07:03 -0500 Subject: [PATCH] fix/factor ~ fix fault when factoring number composed of a squared factor --- src/uu/factor/src/factor.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/uu/factor/src/factor.rs b/src/uu/factor/src/factor.rs index 4f625441c..ffb099f2a 100644 --- a/src/uu/factor/src/factor.rs +++ b/src/uu/factor/src/factor.rs @@ -169,10 +169,16 @@ pub fn factor(num: u64) -> Factors { if let Some(divisor) = find_factor(factor) { let mut gcd_queue = Decomposition::one(); - gcd_queue.add(divisor, exp); - gcd_queue.add(factor / divisor, exp); - let mut non_trivial_gcd = true; + let quotient = factor / divisor; + if quotient == divisor { + gcd_queue.add(divisor, exp + 1); + } else { + gcd_queue.add(divisor, exp); + gcd_queue.add(quotient, exp); + } + + let mut non_trivial_gcd = quotient != divisor; while non_trivial_gcd { debug_assert_eq!(factor, gcd_queue.product());