diff options
| author | 冯昶 <seaker@qq.com> | 2021-10-09 18:27:06 +0800 |
|---|---|---|
| committer | 冯昶 <seaker@qq.com> | 2021-10-09 18:27:06 +0800 |
| commit | a9b3cf3285adb7126b920a6fdc4315ac3ba6ddec (patch) | |
| tree | a9b2b06846cc57c82ca67b3ee9f462f33c3ee9b6 | |
| parent | 2bd4f4d95ef7c33d45b5a80e69fce40287039986 (diff) | |
| download | perlweeklychallenge-club-a9b3cf3285adb7126b920a6fdc4315ac3ba6ddec.tar.gz perlweeklychallenge-club-a9b3cf3285adb7126b920a6fdc4315ac3ba6ddec.tar.bz2 perlweeklychallenge-club-a9b3cf3285adb7126b920a6fdc4315ac3ba6ddec.zip | |
challenge 133, raku solutions
| -rwxr-xr-x | challenge-133/feng-chang/raku/ch-1.raku | 17 | ||||
| -rwxr-xr-x | challenge-133/feng-chang/raku/ch-2.raku | 28 |
2 files changed, 45 insertions, 0 deletions
diff --git a/challenge-133/feng-chang/raku/ch-1.raku b/challenge-133/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..1322a40a06 --- /dev/null +++ b/challenge-133/feng-chang/raku/ch-1.raku @@ -0,0 +1,17 @@ +#!/bin/env raku + +my method sqrt(UInt:D \N: --> UInt:D) { + my UInt $m; + my UInt $n = N; + + repeat { + $m = $n; + $n = ($m + N div $m) div 2; + } while $n < $m; + + $m +} + +sub MAIN(UInt:D \N where * > 0) { + put N.&sqrt; +} diff --git a/challenge-133/feng-chang/raku/ch-2.raku b/challenge-133/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..0f63b31841 --- /dev/null +++ b/challenge-133/feng-chang/raku/ch-2.raku @@ -0,0 +1,28 @@ +#!/bin/env raku + +sub facts(UInt:D \N where * > 1 --> Hash:D) { + my Int $m = N; + my Hash $F; + + for (^∞).grep: *.is-prime -> $p { + while ($m %% $p) { + ++$F{$p}; + $m div= $p; + } + + last if $m < $p * $p; + + LAST { ++$F{$m} if $m > 1 } + } + + $F +} + +sub is-smith-number(UInt:D \N --> Bool:D) { + return False if N.is-prime; + + my Hash $F = facts(N); + N.comb.sum == $F.keys.map({ $_.comb.sum * $F{$_} }).sum +} + +put (2..∞).grep({ is-smith-number($_) })[^10]; |
