This is an automated email from the git hooks/post-receive script. ppm-guest pushed a commit to annotated tag v0.38 in repository libmath-prime-util-perl.
commit 777992aa8563a35848dd9288719065e9fa11506d Author: Dana Jacobsen <d...@acm.org> Date: Thu Jan 30 22:51:14 2014 -0800 Update some PE examples --- MANIFEST | 1 + examples/project_euler_211.pl | 17 +++++++++++++++++ examples/project_euler_357.pl | 18 +++++++++++++++--- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/MANIFEST b/MANIFEST index a745742..20849e5 100644 --- a/MANIFEST +++ b/MANIFEST @@ -75,6 +75,7 @@ examples/project_euler_049.pl examples/project_euler_069.pl examples/project_euler_070.pl examples/project_euler_095.pl +examples/project_euler_211.pl examples/project_euler_357.pl bin/primes.pl bin/factor.pl diff --git a/examples/project_euler_211.pl b/examples/project_euler_211.pl new file mode 100644 index 0000000..e6791fa --- /dev/null +++ b/examples/project_euler_211.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use warnings; +use strict; +use Math::Prime::Util qw/:all/; + +# Brute force using MPU's divisor_sum. +# MPU v0.38 1.5 minutes +# Pari 3.5 minutes: +# s=0; for(n=1,64000000-1,if(issquare(sigma(n,2)),s=s+n;)) + +my $n = shift || 64_000_000; + +my $sum = 0; +foreach my $i (0 .. $n-1) { + $sum += $i if is_power( divisor_sum($i, 2) , 2); +} +print "$sum\n"; diff --git a/examples/project_euler_357.pl b/examples/project_euler_357.pl index 5b69fe0..b805d15 100644 --- a/examples/project_euler_357.pl +++ b/examples/project_euler_357.pl @@ -2,13 +2,25 @@ use warnings; use strict; use Math::Prime::Util qw/:all/; +use List::MoreUtils qw/all/; -# Takes ~ 10 seconds +my $maxn = shift || 100_000_000; + +# Takes ~ 5 seconds my $sum = 0; forprimes { my $n = $_-1; # 1+$n/1 is prime (hence n=1 or even) if (is_prime(2+($n>>1))) { # 2+$n/2 is prime (noting n is even or 1) - $sum += $n unless scalar grep { !is_prime($_+$n/$_) } divisors($n); + if (moebius($n) != 0) { # n should be square free + $sum += $n if all { is_prime($_+$n/$_) } divisors($n); + } } -} 100_000_000; +} $maxn; print "$sum\n"; + +# We could additionally check these: +# if ( (($n+2) % 4) == 0 || $n == 1) { +# Using all is more efficient, but this works: +# $sum += $n unless scalar grep { !is_prime($_+$n/$_) } divisors($n); +# We could alternately generate primes to $maxn/2, +# my $n = 2*$_-4; if (is_prime($n+1)) { ... } -- 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