aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2021-10-06 13:43:18 +0200
committerLuca Ferrari <fluca1978@gmail.com>2021-10-06 13:43:18 +0200
commit40a4b5624b29e6d21903dc0f18b7dd79ac719136 (patch)
treefd1cc7ad09502270c56ce9831a01ba49e6dd7889
parent44b41f2e16ab83801cfa34fb07fa5c2ef46be24c (diff)
downloadperlweeklychallenge-club-40a4b5624b29e6d21903dc0f18b7dd79ac719136.tar.gz
perlweeklychallenge-club-40a4b5624b29e6d21903dc0f18b7dd79ac719136.tar.bz2
perlweeklychallenge-club-40a4b5624b29e6d21903dc0f18b7dd79ac719136.zip
Task 2 done.
-rw-r--r--challenge-133/luca-ferrari/raku/ch-2.p644
1 files changed, 44 insertions, 0 deletions
diff --git a/challenge-133/luca-ferrari/raku/ch-2.p6 b/challenge-133/luca-ferrari/raku/ch-2.p6
new file mode 100644
index 0000000000..0af9fa5cd0
--- /dev/null
+++ b/challenge-133/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,44 @@
+#!raku
+
+my @PRIMES = grep {.is-prime}, 1..*;
+
+multi do-factor( 1 ) { (1) }
+multi do-factor( Int $n where { $n > 1 } ) {
+ my ( $pos, $needle ) = 0, $n;
+
+ my @factors;
+
+ for @PRIMES -> $current-factor {
+ last if $current-factor > $needle;
+ next unless $needle %% $current-factor;
+
+ # if here, it is a good factor
+ @factors.push: $current-factor;
+
+ $needle /= $current-factor;
+ }
+
+
+ @factors;
+
+
+}
+
+
+
+sub is-smith-number( Int $n where { $n > 0 } ) {
+ return $n.comb.sum == do-factor( $n ).sum;
+}
+
+
+sub MAIN( Int $limit where { $limit > 0 } = 10 ) {
+
+ my @smith-numbers;
+ for 1 .. Inf {
+ next if ! is-smith-number( $_ );
+ @smith-numbers.push: $_;
+ last if @smith-numbers.elems == $limit;
+ }
+
+ @smith-numbers.join( "\n" ).say;
+}