diff options
| -rw-r--r-- | challenge-167/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-167/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-167/polettix/perl/ch-1.pl | 32 | ||||
| -rw-r--r-- | challenge-167/polettix/perl/ch-2.pl | 32 | ||||
| -rw-r--r-- | challenge-167/polettix/perl/cpanfile | 1 | ||||
| -rw-r--r-- | challenge-167/polettix/perl/cpanfile.snapshot | 38 | ||||
| -rw-r--r-- | challenge-167/polettix/raku/ch-1.raku | 24 | ||||
| -rw-r--r-- | challenge-167/polettix/raku/ch-2.raku | 28 |
8 files changed, 157 insertions, 0 deletions
diff --git a/challenge-167/polettix/blog.txt b/challenge-167/polettix/blog.txt new file mode 100644 index 0000000000..4bc4c6df7b --- /dev/null +++ b/challenge-167/polettix/blog.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2022/05/31/pwc167-circular-prime/ diff --git a/challenge-167/polettix/blog1.txt b/challenge-167/polettix/blog1.txt new file mode 100644 index 0000000000..c53cb6a776 --- /dev/null +++ b/challenge-167/polettix/blog1.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2022/06/01/pwc167-gamma-function/ diff --git a/challenge-167/polettix/perl/ch-1.pl b/challenge-167/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..d3facf3603 --- /dev/null +++ b/challenge-167/polettix/perl/ch-1.pl @@ -0,0 +1,32 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +use File::Basename 'dirname'; +use lib dirname(__FILE__) . '/local/lib/perl5'; + +use ntheory qw< next_prime is_prime >; + +my $n = shift // 10; +my @retval; +my $candidate = 100; +while ($n > 0) { + $candidate = next_prime($candidate); + next unless is_circular_prime($candidate); + push @retval, $candidate; + --$n; +} + +say join ', ', @retval; + +sub is_circular_prime ($x) { + my $initial = $x; + for (2 .. length $x) { + return !!0 unless is_prime($x); + $x = substr($x, 1) . substr($x, 0, 1); + return !!0 if $x < $initial; + } + return is_prime($x); +} diff --git a/challenge-167/polettix/perl/ch-2.pl b/challenge-167/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..a9eacc9091 --- /dev/null +++ b/challenge-167/polettix/perl/ch-2.pl @@ -0,0 +1,32 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +say "$_ -> @{[ gamma($_) ]}" for @ARGV; + +sub gamma ($x) { exp(gammaln($x)) } + +sub gammaln ($x) { + die "bad argument in gammaln\n" if $x <= 0; + + state $cof = [ + 57.1562356658629235, -59.5979603554754912, + 14.1360979747417471, -0.491913816097620199, + .339946499848118887e-4, .465236289270485756e-4, + -.983744753048795646e-4, .158088703224912494e-3, + -.210264441724104883e-3, .217439618115212643e-3, + -.164318106536763890e-3, .844182239838527433e-4, + -.261908384015814087e-4, .368991826595316234e-5 + ]; + + my $y = $x; + my $tmp = $x + 5.24218750000000000; + $tmp = ($x + 0.5) * log($tmp) - $tmp; + my $ser = 0.999999999999997092; + + $ser += $_ / ++$y for $cof->@*; + + return $tmp + log(2.5066282746310005 * $ser / $x); +} ## end sub gammaln ($x) diff --git a/challenge-167/polettix/perl/cpanfile b/challenge-167/polettix/perl/cpanfile new file mode 100644 index 0000000000..91dda9616f --- /dev/null +++ b/challenge-167/polettix/perl/cpanfile @@ -0,0 +1 @@ +requires 'Math::Prime::Util'; diff --git a/challenge-167/polettix/perl/cpanfile.snapshot b/challenge-167/polettix/perl/cpanfile.snapshot new file mode 100644 index 0000000000..2fd600a3af --- /dev/null +++ b/challenge-167/polettix/perl/cpanfile.snapshot @@ -0,0 +1,38 @@ +# carton snapshot format: version 1.0 +DISTRIBUTIONS + Math-Prime-Util-0.73 + pathname: D/DA/DANAJ/Math-Prime-Util-0.73.tar.gz + provides: + Math::Prime::Util 0.73 + Math::Prime::Util::ChaCha 0.73 + Math::Prime::Util::Entropy 0.73 + Math::Prime::Util::MemFree 0.73 + Math::Prime::Util::PP 0.73 + Math::Prime::Util::PrimeArray 0.73 + Math::Prime::Util::PrimeIterator 0.73 + ntheory 0.73 + requirements: + Carp 0 + Config 0 + Exporter 5.57 + ExtUtils::MakeMaker 0 + Math::BigFloat 1.59 + Math::BigInt 1.88 + Math::Prime::Util::GMP 0.50 + Tie::Array 0 + XSLoader 0.01 + base 0 + constant 0 + perl 5.006002 + Math-Prime-Util-GMP-0.52 + pathname: D/DA/DANAJ/Math-Prime-Util-GMP-0.52.tar.gz + provides: + Math::Prime::Util::GMP 0.52 + requirements: + Carp 0 + Exporter 5.57 + ExtUtils::MakeMaker 0 + Fcntl 0 + XSLoader 0.01 + base 0 + perl 5.006002 diff --git a/challenge-167/polettix/raku/ch-1.raku b/challenge-167/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..169412c0e3 --- /dev/null +++ b/challenge-167/polettix/raku/ch-1.raku @@ -0,0 +1,24 @@ +#!/usr/bin/env raku +use v6; +subset PosInt where * > 0; +sub MAIN (PosInt:D $n is copy = 10) { + my $x = 99; + my @result = gather while $n > 0 { + if is-circular-prime($x) { + take $x; + --$n; + } + $x += 2; + } + @result.join(', ').put; +} + +sub is-circular-prime ($x is copy) { + my $initial = $x; + for 1 ..^ $x.chars { + return False unless $x.is-prime; + $x = $x.substr(*-1, 1) ~ $x.substr(0, *-1); + return False if $x < $initial; + } + return $x.is-prime; +} diff --git a/challenge-167/polettix/raku/ch-2.raku b/challenge-167/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..cc4bd533f9 --- /dev/null +++ b/challenge-167/polettix/raku/ch-2.raku @@ -0,0 +1,28 @@ +#!/usr/bin/env raku +use v6; + +sub MAIN (*@args) { + put "$_ -> {gamma($_)}" for @args; +} + +sub gamma ($x) { exp(gammaln($x)) } + +sub gammaln (Numeric:D $x where * > 0) { + state @cof = + 57.1562356658629235, -59.5979603554754912, + 14.1360979747417471, -0.491913816097620199, + .339946499848118887e-4, .465236289270485756e-4, + -.983744753048795646e-4, .158088703224912494e-3, + -.210264441724104883e-3, .217439618115212643e-3, + -.164318106536763890e-3, .844182239838527433e-4, + -.261908384015814087e-4, .368991826595316234e-5; + + my $tmp = $x + 5.24218750000000000; + $tmp = ($x + 0.5) * log($tmp) - $tmp; + + my $y = $x; + my $ser = 0.999999999999997092; + $ser += $_ / ++$y for |@cof; + + return $tmp + log(2.5066282746310005 * $ser / $x); +} ## end sub gammaln ($x) |
