diff options
| author | 3ter <dritterseinistalles@gmail.com> | 2020-06-23 22:29:33 +0200 |
|---|---|---|
| committer | 3ter <dritterseinistalles@gmail.com> | 2020-06-23 22:29:33 +0200 |
| commit | d633ef1b79ff337337e5d186ff74ba3325bf367c (patch) | |
| tree | dcfb575fba692e6469b72871ba8c899d91701a79 | |
| parent | 198832014560d0ef9c7f1940fddda5fd263b695f (diff) | |
| download | perlweeklychallenge-club-d633ef1b79ff337337e5d186ff74ba3325bf367c.tar.gz perlweeklychallenge-club-d633ef1b79ff337337e5d186ff74ba3325bf367c.tar.bz2 perlweeklychallenge-club-d633ef1b79ff337337e5d186ff74ba3325bf367c.zip | |
add second challenge
| -rw-r--r-- | challenge-066/3ter/ch-2.pl | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/challenge-066/3ter/ch-2.pl b/challenge-066/3ter/ch-2.pl new file mode 100644 index 0000000000..c1258b6253 --- /dev/null +++ b/challenge-066/3ter/ch-2.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl +use strict; +use warnings; +use v5.30; + +my ($int) = @ARGV; +die 'Please provide one integer e.g. \'ch-2.pl 9\'' + if ( !defined($int) ); + +say power_integers($int); + +sub power_integers { + my ($int) = @_; + + my ( $factor, $power ) = get_factor_and_power($int); + if ( defined($power) and $power > 0 ) { + return $factor . '^' . $power; + } + else { + return 0; + } +} + +sub get_factor_and_power { + my ($int) = @_; + + # try those factors naively + my $factor; + my $max_factor = int( sqrt($int) ); + foreach my $potential_factor ( 2 .. $max_factor ) { + if ( $int % $potential_factor == 0 ) { + $factor = $potential_factor; + + # verify that the factor is powerful enough + my $power = 1; + while ( $factor**$power < $int ) { + $power++; + } + return ( $factor, $power ) if ( $factor**$power == $int ); + } + } + return 0; +} + |
