
The patch avoids a redundant zeroing of c[i]. $ diff -u {a,b}/Main.lhs --- a/Main.lhs 2009-08-23 21:07:08.000000000 -0400 +++ b/Main.lhs 2009-08-23 21:09:54.000000000 -0400 @@ -255,12 +255,11 @@
-- where n is the length of c. -- x[n] = sum[j] (c[j] div c[i] * x[j]) -- The new equation to be solved is:
-> -- c[i]*x[n] + sum[j] c'[j]*x[j] = d[k] for all k -> -- where c'[j] = c[j] mod c[i] for j /= i and c'[i] = 0. -> let c' = map (\x -> mod x ci) (zero i c) -> c'' = divide ci (zero i c) -> subst' = eliminate n (i, (invert c'' ++ [1], [])) subst in -> intLinEqLoop n (c' ++ [ci], d) subst' +> -- c[i]*x[n] + sum[j] (c[j] mod c[i])*x[j] = d[k] for all k +> intLinEqLoop n (map (\x -> mod x ci) c ++ [ci], d) subst' +> where +> subst' = eliminate n (i, (invert c' ++ [1], [])) subst +> c' = divide ci (zero i c)
-- Find the smallest coefficient in absolute value smallest :: [Int] -> (Int, Int)
$