aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author3ter <dritterseinistalles@gmail.com>2020-06-23 22:29:33 +0200
committer3ter <dritterseinistalles@gmail.com>2020-06-23 22:29:33 +0200
commitd633ef1b79ff337337e5d186ff74ba3325bf367c (patch)
treedcfb575fba692e6469b72871ba8c899d91701a79
parent198832014560d0ef9c7f1940fddda5fd263b695f (diff)
downloadperlweeklychallenge-club-d633ef1b79ff337337e5d186ff74ba3325bf367c.tar.gz
perlweeklychallenge-club-d633ef1b79ff337337e5d186ff74ba3325bf367c.tar.bz2
perlweeklychallenge-club-d633ef1b79ff337337e5d186ff74ba3325bf367c.zip
add second challenge
-rw-r--r--challenge-066/3ter/ch-2.pl44
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;
+}
+