aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
+}