aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-06-18 09:44:16 +0100
committerGitHub <noreply@github.com>2022-06-18 09:44:16 +0100
commit42f0eee7a72bef51f9c3785d2c34f31a4bf67a10 (patch)
tree2e62e8c028338bb48861258576e4eec7aa944b91
parente3d41b71930493e2ae378d7c2846eaafdfd73890 (diff)
parente9980689bf705152fda312912ce18b65b16b5fa7 (diff)
downloadperlweeklychallenge-club-42f0eee7a72bef51f9c3785d2c34f31a4bf67a10.tar.gz
perlweeklychallenge-club-42f0eee7a72bef51f9c3785d2c34f31a4bf67a10.tar.bz2
perlweeklychallenge-club-42f0eee7a72bef51f9c3785d2c34f31a4bf67a10.zip
Merge pull request #6280 from LubosKolouch/master
feat(challenge-169/lubos-kolouch/perl/ch-{1,2}.pl): Challenge 169 LK Perl Task 1 2
-rw-r--r--challenge-169/lubos-kolouch/perl/ch-1.pl47
-rw-r--r--challenge-169/lubos-kolouch/perl/ch-2.pl59
2 files changed, 106 insertions, 0 deletions
diff --git a/challenge-169/lubos-kolouch/perl/ch-1.pl b/challenge-169/lubos-kolouch/perl/ch-1.pl
new file mode 100644
index 0000000000..1967787fba
--- /dev/null
+++ b/challenge-169/lubos-kolouch/perl/ch-1.pl
@@ -0,0 +1,47 @@
+package main;
+use strict;
+use warnings;
+
+use Math::Prime::Util qw/factor/;
+
+sub is_brilliant_number {
+ my $number = shift;
+
+ my @factors = factor($number);
+
+ if ( ( scalar @factors == 2 ) and ( length( $factors[0] ) == length( $factors[1] ) ) ) {
+ return 1;
+ }
+
+ return 0;
+}
+
+sub generate_brilliant_numbers {
+ my $limit = shift;
+
+ my @brilliant_numbers;
+
+ my $i = 0;
+ while ( scalar @brilliant_numbers < $limit ) {
+ $i++;
+
+ if ( is_brilliant_number($i) ) {
+ push @brilliant_numbers, $i;
+ }
+ }
+
+ return \@brilliant_numbers;
+}
+
+use Test::More;
+
+is( is_brilliant_number(2), 0 );
+is( is_brilliant_number(4), 1 );
+is( is_brilliant_number(6), 1 );
+is( is_brilliant_number(187), 1 );
+
+is_deeply( generate_brilliant_numbers(20),
+ [ 4, 6, 9, 10, 14, 15, 21, 25, 35, 49, 121, 143, 169, 187, 209, 221, 247, 253, 289, 299 ] );
+
+done_testing;
+1;
diff --git a/challenge-169/lubos-kolouch/perl/ch-2.pl b/challenge-169/lubos-kolouch/perl/ch-2.pl
new file mode 100644
index 0000000000..8b8fcda497
--- /dev/null
+++ b/challenge-169/lubos-kolouch/perl/ch-2.pl
@@ -0,0 +1,59 @@
+package main;
+use strict;
+use warnings;
+use Math::Prime::Util qw/factor_exp gcd/;
+use List::Util qw/min/;
+
+sub is_achilles_number {
+
+# https://en.wikipedia.org/wiki/Achilles_number
+# A number n = p1a1p2a2…pkak is powerful if min(a1, a2, …, ak) ≥ 2. If in addition gcd(a1, a2, …, ak) = 1 the number is an Achilles number.
+
+ my $number = shift;
+
+ my @factors = factor_exp($number);
+ my $sum = 0;
+
+ my @exps;
+
+ for my $factor (@factors) {
+ my $e = $factor->[1];
+
+ push @exps, $e;
+ }
+
+ return 1 if ( min(@exps) >= 2 ) and ( gcd(@exps) == 1 );
+
+ return 0;
+}
+
+sub generate_achilles_numbers {
+ my $limit = shift;
+
+ my @achilles_numbers;
+
+ my $i = 2;
+
+ while ( scalar @achilles_numbers < $limit ) {
+ push @achilles_numbers, $i if is_achilles_number($i);
+ $i++;
+ }
+
+ return \@achilles_numbers;
+}
+
+use Test::More;
+
+is( is_achilles_number(36), 0 );
+is( is_achilles_number(72), 1 );
+
+is_deeply(
+ generate_achilles_numbers(20),
+ [
+ 72, 108, 200, 288, 392, 432, 500, 648, 675, 800,
+ 864, 968, 972, 1125, 1152, 1323, 1352, 1372, 1568, 1800
+ ]
+);
+
+done_testing;
+1;