From da96089a9ce5139d67045553b2935cdbee9e430f Mon Sep 17 00:00:00 2001 From: Luis Mochan Date: Mon, 13 Jun 2022 19:32:47 -0500 Subject: Solve PWC169 --- challenge-169/wlmb/blog.txt | 1 + challenge-169/wlmb/perl/ch-1.pl | 22 ++++++++++++++++++++++ challenge-169/wlmb/perl/ch-2.pl | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 challenge-169/wlmb/blog.txt create mode 100755 challenge-169/wlmb/perl/ch-1.pl create mode 100755 challenge-169/wlmb/perl/ch-2.pl 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; -- cgit