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 759e933fe14a70dfab6023ca68aa01a2392a780a Author: Dana Jacobsen <d...@acm.org> Date: Thu Feb 13 12:26:24 2014 -0800 Add xt ispower test and some more PE examples --- MANIFEST | 3 +++ examples/project_euler_131.pl | 18 ++++++++++++++++++ examples/project_euler_142.pl | 42 ++++++++++++++++++++++++++++++++++++++++++ xt/test-ispower.pl | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+) diff --git a/MANIFEST b/MANIFEST index 399f926..5121185 100644 --- a/MANIFEST +++ b/MANIFEST @@ -77,6 +77,8 @@ examples/project_euler_069.pl examples/project_euler_070.pl examples/project_euler_072.pl examples/project_euler_095.pl +examples/project_euler_131.pl +examples/project_euler_142.pl examples/project_euler_211.pl examples/project_euler_214.pl examples/project_euler_342.pl @@ -141,4 +143,5 @@ xt/test-primes-script.pl xt/test-primes-script2.pl xt/test-factor-yafu.pl xt/test-nextprime-yafu.pl +xt/test-ispower.pl .travis.yml diff --git a/examples/project_euler_131.pl b/examples/project_euler_131.pl new file mode 100644 index 0000000..05b3d5b --- /dev/null +++ b/examples/project_euler_131.pl @@ -0,0 +1,18 @@ +#!/usr/bin/env perl +use warnings; +use strict; +use Math::Prime::Util qw/is_prime/; + +my $limit = shift || 1000000; + +# Any prime p where n^3 + n^2*p = m^3 must be the difference of (i+1)^3 - i^3. +# So we'll just walk them looking for primes. + +my $sum = 0; +foreach my $i (1 .. 2650070) { + my $j = $i+1; + my $p = $j*$j*$j - $i*$i*$i; + last if $p > $limit; + $sum++ if is_prime($p); +} +print "$sum\n"; diff --git a/examples/project_euler_142.pl b/examples/project_euler_142.pl new file mode 100644 index 0000000..4d0ab12 --- /dev/null +++ b/examples/project_euler_142.pl @@ -0,0 +1,42 @@ +#!/usr/bin/env perl +use warnings; +use strict; +use Math::Prime::Util qw/:all/; + +# x+y = a^2 x = a^2 - y +# x-y = b^2 a^2-y-y = b^2 2y = b^2-a^2 y = (b^2-a^2)/2 +# x+z = c^2 z = c^2 - z +# x-z = d^2 c^2-z-z=d^2 2z = c^2-d^2 z = (c^2-d^2)/2 +# y+z = e^2 +# y-z = f^2 x = (e^2-f^2)/2 + +# x+y = a^2 x-y = b^2 ===> 2x = a^2+b^2 x=(a^2+b^2)/2 +# x+z = c^2 x-z = d^2 ===> 2z = c^2-d^2 z=(c^2-d^2)/2 +# y+z = e^2 y-z = f^2 ===> 2y = e^2+f^2 y=(e^2+f^2)/2 + +# a^2 = x+y = x+y+z-z = x+z + y-z = c^2 + f^2 +# e^2 = y+z = y+z+x-x = y+x -(x-z) = a^2 - d^2 +# b^2 = x-y = x-y+z-z = x+z -(y+z) = c^2 - e^2 + +foreach my $a (4 .. 1000000) { + my $a2 = $a*$a; + foreach my $c (3 .. $a-1) { + my $c2 = $c*$c; + my $f2 = $a2 - $c2; + next unless $f2 >= 0 && is_power($f2,2); + foreach my $d (1 .. $c-1) { + next if ($d ^ $c) & 1; # c and d must have same parity + my $d2 = $d*$d; + my $e2 = $a2 - $d2; + my $b2 = $c2 - $e2; + next if $e2 <= 0 || $b2 <= 0; + #next if (($a2+$b2) & 1) || (($e2+$f2) & 1) || (($c2-$d2) & 1); + next unless is_power($e2,2) && is_power($b2,2); + my $x = ($a2+$b2) >> 1; + my $y = ($e2+$f2) >> 1; + my $z = ($c2-$d2) >> 1; + my $result = $x+$y+$z; + die "$result [$x $y $z]\n"; + } + } +} diff --git a/xt/test-ispower.pl b/xt/test-ispower.pl new file mode 100755 index 0000000..234b099 --- /dev/null +++ b/xt/test-ispower.pl @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use strict; +use warnings; +$| = 1; # fast pipes + +use Math::Prime::Util qw/is_prime is_power/; +use Math::GMPz; + +foreach my $e (5 .. 37) { + next unless is_prime($e); + print "$e "; + for (3..1000000) { + my $n = Math::GMPz->new($_) ** $e; + last if $n > ~0; + die "$n\n" unless is_power($n); + foreach my $o (-10..10) { + my $m = $n+$o; + next if $m==$n; + die "$m\n" if is_power($m) && int(sqrt($m))**2 != $m && $m!=2197; + } + } +} +print "\n"; + +my $int = 100000; +foreach my $i (1 .. 80*$int) { + print "." unless $i % $int; + my @iroots = (0,0,map { int($i ** (1.0/$_) + 0.00001) ** $_ } 2 .. 12); + foreach my $e (2 .. 12) { + if (is_power($i,$e)) { die "$i $e" unless $iroots[$e] == $i; } + else { die "$i $e" unless $iroots[$e] != $i; } + } +} +print "\n"; -- 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