This is an automated email from the git hooks/post-receive script. ppm-guest pushed a commit to annotated tag v0.36 in repository libmath-prime-util-perl.
commit f60d0468b0ae4c7a34a61eb78fb4e9cd9bf490c9 Author: Dana Jacobsen <d...@acm.org> Date: Sun Jan 5 07:06:27 2014 -0800 Speedup for palindromic primes --- bin/primes.pl | 21 ++++++++------------- xt/test-primes-script2.pl | 4 +++- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/bin/primes.pl b/bin/primes.pl index f574a98..24e536e 100755 --- a/bin/primes.pl +++ b/bin/primes.pl @@ -350,21 +350,15 @@ sub lucky_primes { # This is not a general palindromic digit function! sub ndig_palindromes { my $digits = shift; - return (2,3,5,7,9) if $digits == 1; + return (2,3,5,7) if $digits == 1; return (11) if $digits == 2; return () if ($digits % 2) == 0; - my @prefixes = (1,3,7,9); - my $inner_digits = ($digits-1) / 2 - 1; - foreach my $d (1 .. $inner_digits) { - @prefixes = map { ($_.'0', $_.'1', $_.'2', $_.'3', $_.'4', - $_.'5', $_.'6', $_.'7', $_.'8', $_.'9',); } @prefixes; - } - return map { my $r = reverse($_); - ($_.'0'.$r, $_.'1'.$r, $_.'2'.$r, $_.'3'.$r, - $_.'4'.$r, $_.'5'.$r, $_.'6'.$r, $_.'7'.$r, - $_.'8'.$r, $_.'9'.$r,); - } @prefixes; + my $rhdig = int(($digits - 1) / 2); + return grep { is_prime($_) } + map { $_ . reverse substr($_,0,$rhdig) } + map { $_ * int(10**$rhdig) .. ($_+1) * int(10**$rhdig) - 1 } + 1, 3, 7, 9; } # See: http://en.wikipedia.org/wiki/Pillai_prime @@ -433,6 +427,7 @@ sub gen_and_filter { my ($start, $end) = @_; my $gen; my $p = []; + $end-- if ($end % 2) == 0 && $end > 2; if (exists $opts{'lucas'}) { merge_primes(\$gen, $p, 'lucas', lucas_primes($start, $end)); @@ -461,7 +456,7 @@ sub gen_and_filter { if (exists $opts{'palindromic'}) { if (!defined $gen) { foreach my $d (length($start) .. length($end)) { - push @$p, grep { $_ >= $start && $_ <= $end && is_prime($_) } + push @$p, grep { $_ >= $start && $_ <= $end } ndig_palindromes($d); } $gen = 'palindromic'; diff --git a/xt/test-primes-script2.pl b/xt/test-primes-script2.pl index 483150b..1ab5572 100755 --- a/xt/test-primes-script2.pl +++ b/xt/test-primes-script2.pl @@ -7,6 +7,8 @@ use Time::HiRes qw(gettimeofday tv_interval); use bigint; use Math::NumSeq; $|++; #flush the output buffer after every write() or print() function +my $use64; +BEGIN { no bigint; $use64 = (~0 > 4294967295); } compare('Primes', 10000000, @@ -28,7 +30,7 @@ compare('Sophie Germain', # 2) it supports bignums, which is required for Fib, Euclid, Lucas, etc. compare('Palindromic', - (~0 > 4294967295) ? '10**11' : '10**10', + $use64 ? '10**11' : '10**10', "$FindBin::Bin/../bin/primes.pl --palin 1 LASTNUM", q/perl -MMath::Prime::Util=is_prime -MMath::NumSeq::Palindromes -e 'my $seq = Math::NumSeq::Palindromes->new; while (1) { my $v = ($seq->next)[1]; last if $v > LASTNUM; print "$v\n" if is_prime($v); }'/); -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits