[libmath-prime-util-perl] 32/59: Add tests for strong lucas pseudoprimes
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:44:57 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.10
in repository libmath-prime-util-perl.
commit da62a64cedf47e4f690baedb77c77d9e33f018e9
Author: Dana Jacobsen <dana at acm.org>
Date: Fri Jul 6 19:41:39 2012 -0600
Add tests for strong lucas pseudoprimes
---
t/17-pseudoprime.t | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/t/17-pseudoprime.t b/t/17-pseudoprime.t
index 1e5c76e..805fe9b 100644
--- a/t/17-pseudoprime.t
+++ b/t/17-pseudoprime.t
@@ -29,7 +29,7 @@ $#phis = 3 unless $use64;
# perl -MMath::Prime::Util=:all -E 'my $_=$base|1; while(1) {print "$_ " if is_strong_pseudoprime($_,$base) && !is_prime($_); $_+=2; } print "\n"; BEGIN {$|=1; $base=553174392}'
my %pseudoprimes = (
- 2 => [ qw/2047 3277 4033 4681 8321 15841 29341 42799 49141 52633 65281 74665 80581 85489 88357 90751/ ],
+ 2 => [ qw/2047 3277 4033 4681 8321 15841 29341 42799 49141 52633 65281 74665 80581 85489 88357 90751 1194649/ ],
3 => [ qw/121 703 1891 3281 8401 8911 10585 12403 16531 18721 19345 23521 31621 44287 47197 55969 63139 74593 79003 82513 87913 88573 97567/ ],
5 => [ qw/781 1541 5461 5611 7813 13021 14981 15751 24211 25351 29539 38081 40501 44801 53971 79381/ ],
7 => [ qw/25 325 703 2101 2353 4525 11041 14089 20197 29857 29891 39331 49241 58825 64681 76627 78937 79381 87673 88399 88831/ ],
@@ -57,18 +57,20 @@ my %pseudoprimes = (
1795265022 => [ qw/1795265023 1797174457 1797741901 1804469753 1807751977 1808043283 1808205701 1813675681 1816462201 1817936371 1819050257/ ],
3046413974 => [ qw/3046413975 3048698683 3051199817 3068572849 3069705673 3070556233 3079010071 3089940811 3090723901 3109299161 3110951251 3113625601/ ],
3613982119 => [ qw/3626488471 3630467017 3643480501 3651840727 3653628247 3654142177 3672033223 3672036061 3675774019 3687246109 3690036017 3720856369/ ],
+ lucas => [ qw/5459 5777 10877 16109 18971 22499 24569 25199 40309 58519 75077 97439/ ],
);
my $num_pseudoprimes = 0;
foreach my $ppref (values %pseudoprimes) {
$num_pseudoprimes += scalar @$ppref;
}
-
+my @small_lucas_trials = (2, 9, 16, 100, 102, 2047, 2048, 5781, 9000, 14381);
plan tests => 0 + 3
+ 4
+ $num_pseudoprimes
+ scalar @phis
- + 1
+ + 1 # mr base 2 2-4k
+ + scalar @small_lucas_trials
+ 1*$extra;
ok(!eval { is_strong_pseudoprime(2047); }, "MR with no base fails");
@@ -84,7 +86,11 @@ is( is_strong_pseudoprime(3, 2), 1, "MR with 3 shortcut prime");
# Check that each strong pseudoprime base b makes it through MR with that base
while (my($base, $ppref) = each (%pseudoprimes)) {
foreach my $p (@$ppref) {
- ok(is_strong_pseudoprime($p, $base), "Pseudoprime (base $base) $p passes MR");
+ if ($base eq 'lucas') {
+ ok(is_strong_lucas_pseudoprime($p), "$p is a strong Lucas-Selfridge pseudoprime");
+ } else {
+ ok(is_strong_pseudoprime($p, $base), "Pseudoprime (base $base) $p passes MR");
+ }
}
}
@@ -105,7 +111,18 @@ for my $phi (1 .. scalar @phis) {
if (is_strong_pseudoprime($_,2)) { $mr2fail = $_; last; }
}
}
- is($mr2fail, 0, "MR base 2 matches is_prime for 2-4032 (ex 2047,3277)");
+ is($mr2fail, 0, "MR base 2 matches is_prime for 2-4032 (excl 2047,3277)");
+}
+
+# Verify Lucas for some small numbers
+for my $n (@small_lucas_trials) {
+ next if $n == 5459 || $n == 5777 || $n == 10877 || $n == 16109 || $n == 18971;
+ if (is_prime($n)) {
+ # Technically if it is a prime it isn't a pseudoprime.
+ ok(is_strong_lucas_pseudoprime($n), "$n is a prime and a strong Lucas-Selfridge pseudoprime");
+ } else {
+ ok(!is_strong_lucas_pseudoprime($n), "$n is not a prime and not a strong Lucas-Selfridge pseudoprime");
+ }
}
# Verify MR base 2-3 for many small numbers (up to phi2)
--
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