[libmath-prime-util-perl] 52/55: Allow better optimization for invmod and large modulus
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:53:43 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.41
in repository libmath-prime-util-perl.
commit 6c549731d2d71bc9942730d12f81efd031c54595
Author: Dana Jacobsen <dana at acm.org>
Date: Sat May 17 22:11:49 2014 -0700
Allow better optimization for invmod and large modulus
---
lib/Math/Prime/Util/PP.pm | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/Math/Prime/Util/PP.pm b/lib/Math/Prime/Util/PP.pm
index f04a8fb..07a78b8 100644
--- a/lib/Math/Prime/Util/PP.pm
+++ b/lib/Math/Prime/Util/PP.pm
@@ -1528,16 +1528,16 @@ sub invmod {
return if $n == 0 || $a == 0;
return 0 if $n == 1;
$n = -$n if $n < 0; # Pari semantics
- if ($n > (~0>>1)) {
+ if ($n > ~0) {
my $invmod = Math::BigInt->new("$a")->bmodinv("$n");
return if !defined $invmod || $invmod->is_nan;
$invmod = _bigint_to_int($invmod) if $invmod->bacmp(''.~0) <= 0;
return $invmod;
}
- my($t,$nt,$r,$nr) = (0, 1, $n, $a);
- use integer;
+ my($t,$nt,$r,$nr) = (0, 1, $n, $a % $n);
while ($nr != 0) {
- my $quot = int($r/$nr);
+ # Use mod before divide to force correct behavior with high bit set
+ my $quot = int( ($r-($r % $nr))/$nr );
($nt,$t) = ($t-$quot*$nt,$nt);
($nr,$r) = ($r-$quot*$nr,$nr);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git
More information about the Pkg-perl-cvs-commits
mailing list