[libmath-prime-util-perl] 19/33: Clean up some random / proven primes
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:51:42 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.37
in repository libmath-prime-util-perl.
commit 60d376c4c9cf13498567d23cdf09cb716ced1ff4
Author: Dana Jacobsen <dana at acm.org>
Date: Wed Jan 22 22:25:32 2014 -0800
Clean up some random / proven primes
---
lib/Math/Prime/Util.pm | 27 ++++-----------------------
lib/Math/Prime/Util/PrimalityProving.pm | 12 ++++++++++--
lib/Math/Prime/Util/RandomPrimes.pm | 13 ++++++++++++-
3 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/lib/Math/Prime/Util.pm b/lib/Math/Prime/Util.pm
index 79a64f1..1f3fb63 100644
--- a/lib/Math/Prime/Util.pm
+++ b/lib/Math/Prime/Util.pm
@@ -511,8 +511,7 @@ sub prime_iterator {
sub prime_iterator_object {
my($start) = @_;
- eval { require Math::Prime::Util::PrimeIterator; 1; }
- or do { croak "Cannot load Math::Prime::Util::PrimeIterator"; };
+ require Math::Prime::Util::PrimeIterator;
return Math::Prime::Util::PrimeIterator->new($start);
}
@@ -623,13 +622,6 @@ sub lucas_sequence {
#############################################################################
-# For stripping off the header on certificates so they can be combined.
-sub _strip_proof_header {
- my $proof = shift;
- $proof =~ s/^\[MPU - Primality Certificate\]\nVersion \S+\n+Proof for:\nN (\d+)\n+//ms;
- return $proof;
-}
-
# Return just the non-cert portion.
sub is_provable_prime {
my($n) = @_;
@@ -674,10 +666,7 @@ sub is_provable_prime_with_cert {
return ($isp, $cert);
}
# Old version. Convert.
- if (!defined $Math::Prime::Util::PrimalityProving::VERSION) {
- eval { require Math::Prime::Util::PrimalityProving; 1; }
- or do { croak "Cannot load Math::Prime::Util::PrimalityProving"; };
- }
+ require Math::Prime::Util::PrimalityProving;
return ($isp, Math::Prime::Util::PrimalityProving::convert_array_cert_to_string($cert));
}
@@ -700,11 +689,7 @@ sub is_provable_prime_with_cert {
# AKS horribly slow
# See http://primes.utm.edu/prove/merged.html or other sources.
- if (!defined $Math::Prime::Util::PrimalityProving::VERSION) {
- eval { require Math::Prime::Util::PrimalityProving; 1; }
- or do { croak "Cannot load Math::Prime::Util::PrimalityProving"; };
- }
-
+ require Math::Prime::Util::PrimalityProving;
#my ($isp, $pref) = Math::Prime::Util::PrimalityProving::primality_proof_lucas($n);
my ($isp, $pref) = Math::Prime::Util::PrimalityProving::primality_proof_bls75($n);
carp "proved $n is not prime\n" if !$isp;
@@ -715,11 +700,7 @@ sub is_provable_prime_with_cert {
sub verify_prime {
my @cdata = @_;
- if (!defined $Math::Prime::Util::PrimalityProving::VERSION) {
- eval { require Math::Prime::Util::PrimalityProving; 1; }
- or do { croak "Cannot load Math::Prime::Util::PrimalityProving"; };
- }
-
+ require Math::Prime::Util::PrimalityProving;
my $cert = '';
if (scalar @cdata == 1 && ref($cdata[0]) eq '') {
$cert = $cdata[0];
diff --git a/lib/Math/Prime/Util/PrimalityProving.pm b/lib/Math/Prime/Util/PrimalityProving.pm
index 6d270be..e654860 100644
--- a/lib/Math/Prime/Util/PrimalityProving.pm
+++ b/lib/Math/Prime/Util/PrimalityProving.pm
@@ -57,6 +57,14 @@ sub _small_cert {
"";
}
+# For stripping off the header on certificates so they can be combined.
+sub _strip_proof_header {
+ my $proof = shift;
+ $proof =~ s/^\[MPU - Primality Certificate\]\nVersion \S+\n+Proof for:\nN (\d+)\n+//ms;
+ return $proof;
+}
+
+
sub primality_proof_lucas {
my ($n) = shift;
my @composite = (0, '');
@@ -96,7 +104,7 @@ sub primality_proof_lucas {
carp "could not prove primality of $n.\n";
return (1, '');
}
- push @fac_proofs, Math::Prime::Util::_strip_proof_header($fproof) if $f > $_smallval;
+ push @fac_proofs, _strip_proof_header($fproof) if $f > $_smallval;
}
$cert .= "A $a\n";
foreach my $proof (@fac_proofs) {
@@ -230,7 +238,7 @@ sub primality_proof_bls75 {
carp "could not prove primality of $n.\n";
return (1, '');
}
- push @fac_proofs, Math::Prime::Util::_strip_proof_header($fproof) if $f > $_smallval;
+ push @fac_proofs, _strip_proof_header($fproof) if $f > $_smallval;
}
$cert .= $atext;
$cert .= "----\n";
diff --git a/lib/Math/Prime/Util/RandomPrimes.pm b/lib/Math/Prime/Util/RandomPrimes.pm
index 2b7b0fa..e454b9c 100644
--- a/lib/Math/Prime/Util/RandomPrimes.pm
+++ b/lib/Math/Prime/Util/RandomPrimes.pm
@@ -689,6 +689,15 @@ sub random_nbit_prime {
}
}
+
+# For stripping off the header on certificates so they can be combined.
+sub _strip_proof_header {
+ my $proof = shift;
+ $proof =~ s/^\[MPU - Primality Certificate\]\nVersion \S+\n+Proof for:\nN (\d+)\n+//ms;
+ return $proof;
+}
+
+
sub random_maurer_prime {
my $k = shift;
croak "random_maurer_prime, bits must be >= 2" unless $k >= 2;
@@ -743,7 +752,9 @@ sub random_maurer_prime_with_cert {
}
# I've seen +0, +1, and +2 here. Maurer uses +0. Menezes uses +1.
- my ($q, $qcert) = random_maurer_prime_with_cert( ($r * $k)->bfloor->binc );
+ # We can use +1 because we're using BLS75 theorem 3 later.
+ my $smallk = int(($r * $k)->bfloor->bstr) + 1;
+ my ($q, $qcert) = random_maurer_prime_with_cert($smallk);
$q = Math::BigInt->new("$q") unless ref($q) eq 'Math::BigInt';
my $I = Math::BigInt->new(2)->bpow($k-2)->bdiv($q)->bfloor->as_int();
print "r = $r k = $k q = $q I = $I\n" if $verbose && $verbose != 3;
--
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