aboutsummaryrefslogtreecommitdiff
path: root/challenge-168
diff options
context:
space:
mode:
authorStephen Lynn <bizlsg@localhost.localdomain>2022-06-12 11:21:46 +0800
committerStephen Lynn <bizlsg@localhost.localdomain>2022-06-12 11:21:46 +0800
commit8a6b17c38547a2663b7a46e51dc8fc07c1201889 (patch)
tree3a2bbf3ebf2c3a7ecbc74115f32dc2abba296019 /challenge-168
parentbfba759aa6812adf1536870315cc6648b97163c5 (diff)
downloadperlweeklychallenge-club-8a6b17c38547a2663b7a46e51dc8fc07c1201889.tar.gz
perlweeklychallenge-club-8a6b17c38547a2663b7a46e51dc8fc07c1201889.tar.bz2
perlweeklychallenge-club-8a6b17c38547a2663b7a46e51dc8fc07c1201889.zip
faster ch-2.pl & ch-2.p6 using external libs
Diffstat (limited to 'challenge-168')
-rwxr-xr-xchallenge-168/steve-g-lynn/perl/ch-2.pl37
-rwxr-xr-xchallenge-168/steve-g-lynn/raku/ch-2.p640
2 files changed, 14 insertions, 63 deletions
diff --git a/challenge-168/steve-g-lynn/perl/ch-2.pl b/challenge-168/steve-g-lynn/perl/ch-2.pl
index 5fe95544ad..379ffd9078 100755
--- a/challenge-168/steve-g-lynn/perl/ch-2.pl
+++ b/challenge-168/steve-g-lynn/perl/ch-2.pl
@@ -1,6 +1,11 @@
#!/usr/bin/perl
-use Math::Prime::XS qw(is_prime);
+#time (bash) output:
+#real 0m0.026s
+#user 0m0.019s
+#sys 0m0.007s
+
+use Math::Prime::Util qw(is_prime factor);
print &home_prime(10),"\n";
#773
@@ -14,37 +19,9 @@ print &home_prime(20),"\n";
sub home_prime {
my ($n)=@_;
is_prime($n) && return $n;
- while (1){
- $n=&factors($n);
- (is_prime($n)) && last;
- }
- return $n;
+ return &home_prime(join('',sort{$a<=>$b}(factor($n))));
}
-sub factors {
- #--return concatenated prime factors of a number n
- my ($n)=@_;
- local $sqrt_n=floor(sqrt($n));
-
- my $retstring="";
-
- if (is_prime($n)){
- return $n;
- }
- else {
- for $prime (2 .. $sqrt_n){
- #-- no need to get primes first
- #-- routine automatically finds only prime factors
- while ( ($n % $prime) == 0){
- $n /= $prime;
- $retstring .= $prime;
- }
- (is_prime($n)) && last;
- }
- ($n > 1) && ($retstring .= $n);
- }
- return $retstring;
-}
1;
diff --git a/challenge-168/steve-g-lynn/raku/ch-2.p6 b/challenge-168/steve-g-lynn/raku/ch-2.p6
index f3a1259691..869bc8b3b5 100755
--- a/challenge-168/steve-g-lynn/raku/ch-2.p6
+++ b/challenge-168/steve-g-lynn/raku/ch-2.p6
@@ -1,11 +1,13 @@
#!/usr/bin/raku
#time (bash command):
-#real 0m0.511s
-#user 0m0.622s
-#sys 0m0.046s
+#real 0m0.312s
+#user 0m0.382s
+#sys 0m0.054s
+use Prime::Factor;
+
say homeprime(10);
#773
say homeprime(16);
@@ -15,37 +17,9 @@ say homeprime(20);
#-- sub for home prime
-sub homeprime(Int $n) returns Int {
+sub homeprime(Int $n where ($n > 1)) returns Int {
$n.Int.is-prime && return $n;
- return homeprime(factor($n));
-}
-
-#--sub for factorizing
-
-sub factor (Int $n where $n > 1) returns Int {
-#-- returns the concatenated prime factors as an int
- $n.Int.is-prime && (return $n.Int );
- my Int $sqrt_n = sqrt($n).Int;
-
- my @factors=();
-
- my Str $retstring="";
- my Int $ncopy=$n.Int;
-
- for (2 .. $sqrt_n) -> $prime {
- #-- no need to generate primes first.. the routine will
- #-- automatically only choose prime factors
- while ($ncopy %% $prime) {
- $ncopy div= $prime; #-- integer division
- @factors.append($prime);
- }
- $ncopy.is-prime && last;
- }
- ($ncopy > 1) && @factors.append($ncopy);
- #-- any factor bigger than sqrt(n) is a prime factor
- $retstring = @factors.list.join;
-
- return $retstring.Int;
+ return homeprime(([~] prime-factors($n)).Int);
}