diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-06-18 09:44:16 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-18 09:44:16 +0100 |
| commit | 42f0eee7a72bef51f9c3785d2c34f31a4bf67a10 (patch) | |
| tree | 2e62e8c028338bb48861258576e4eec7aa944b91 | |
| parent | e3d41b71930493e2ae378d7c2846eaafdfd73890 (diff) | |
| parent | e9980689bf705152fda312912ce18b65b16b5fa7 (diff) | |
| download | perlweeklychallenge-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.pl | 47 | ||||
| -rw-r--r-- | challenge-169/lubos-kolouch/perl/ch-2.pl | 59 |
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; |
