aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-169/wlmb/blog.txt1
-rwxr-xr-xchallenge-169/wlmb/perl/ch-1.pl22
-rwxr-xr-xchallenge-169/wlmb/perl/ch-2.pl20
3 files changed, 43 insertions, 0 deletions
diff --git a/challenge-169/wlmb/blog.txt b/challenge-169/wlmb/blog.txt
new file mode 100644
index 0000000000..6d0b94b9de
--- /dev/null
+++ b/challenge-169/wlmb/blog.txt
@@ -0,0 +1 @@
+https://wlmb.github.io/2022/06/13/PWC169/
diff --git a/challenge-169/wlmb/perl/ch-1.pl b/challenge-169/wlmb/perl/ch-1.pl
new file mode 100755
index 0000000000..5de7afdddf
--- /dev/null
+++ b/challenge-169/wlmb/perl/ch-1.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+# Perl weekly challenge 169
+# Task 1: Brilliant numbers
+#
+# See https://wlmb.github.io/2022/06/13/PWC169/#task-1-brilliant-numbers
+use v5.12;
+use warnings;
+use Math::Prime::Util qw(primes);
+use Math::Cartesian::Product;
+die "Usage: ./ch-1.pl N\nto obtain the first N Brilliant numbers" unless @ARGV;
+my $N=shift;
+my $low=1;
+my @brilliant_numbers;
+while(@brilliant_numbers<$N){
+ my $primes=primes($low, 10*$low); # generate primes with 1, 2, 3... digits
+ $low*=10;
+ push @brilliant_numbers,
+ sort {$a <=> $b}
+ map {$_->[0]*$_->[1]}
+ cartesian {$_[0]>=$_[1]} $primes, $primes;
+}
+say "The first $N brilliant numbers are: ", join " ", @brilliant_numbers[0..$N-1];
diff --git a/challenge-169/wlmb/perl/ch-2.pl b/challenge-169/wlmb/perl/ch-2.pl
new file mode 100755
index 0000000000..8218edf843
--- /dev/null
+++ b/challenge-169/wlmb/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/env perl
+# Perl weekly challenge 169
+# Task 2: Achilles numbers
+#
+# See https://wlmb.github.io/2022/06/13/PWC169/#task-2-achilles-numbers
+use v5.12;
+use warnings;
+use Math::Utils qw(gcd);
+use Math::Prime::Util qw(factor_exp);
+use List::Util qw(all);
+die "Usage: ./ch-2.pl N\nto generate the first N Achilles numbers" unless @ARGV;
+my $N=shift;
+my $candidate=1;
+my @achilles_numbers;
+while(@achilles_numbers<$N){
+ my @exponents=map{$_->[1]} factor_exp(++$candidate);
+ push @achilles_numbers, $candidate
+ if @exponents>1 and (all {$_>1} @exponents) and gcd(@exponents)==1;
+}
+say "The first $N Achilles numbers are: ", join " ", @achilles_numbers;