diff options
| author | Luca Ferrari <fluca1978@gmail.com> | 2021-10-06 13:43:18 +0200 |
|---|---|---|
| committer | Luca Ferrari <fluca1978@gmail.com> | 2021-10-06 13:43:18 +0200 |
| commit | 40a4b5624b29e6d21903dc0f18b7dd79ac719136 (patch) | |
| tree | fd1cc7ad09502270c56ce9831a01ba49e6dd7889 | |
| parent | 44b41f2e16ab83801cfa34fb07fa5c2ef46be24c (diff) | |
| download | perlweeklychallenge-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.p6 | 44 |
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; +} |
