From e0eee17ff2e9f4f59cc6ba4e2fd5ddbde41c374e Mon Sep 17 00:00:00 2001 From: Scimon Date: Tue, 5 Apr 2022 11:49:18 +0100 Subject: Challenge 2 --- challenge-159/simon-proctor/raku/ch-1.raku | 2 +- challenge-159/simon-proctor/raku/ch-2.raku | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 challenge-159/simon-proctor/raku/ch-2.raku diff --git a/challenge-159/simon-proctor/raku/ch-1.raku b/challenge-159/simon-proctor/raku/ch-1.raku index c94a0e7bb4..1b03ac2520 100644 --- a/challenge-159/simon-proctor/raku/ch-1.raku +++ b/challenge-159/simon-proctor/raku/ch-1.raku @@ -1,6 +1,6 @@ #!/usr/bin/env raku -# Output the Farey Sequence of order n +#| Output the Farey Sequence of order n sub MAIN ( Int \n ) { ((0..n) X/ (1..n)).grep( * <= 1 ).unique.sort.map( *.nude ).map( { "@_[0]/@_[1]" } ).join(", ").say } diff --git a/challenge-159/simon-proctor/raku/ch-2.raku b/challenge-159/simon-proctor/raku/ch-2.raku new file mode 100644 index 0000000000..364774c744 --- /dev/null +++ b/challenge-159/simon-proctor/raku/ch-2.raku @@ -0,0 +1,23 @@ +#!/usr/bin/env raku + +#| Given a number n print the Möbius number for it +sub MAIN( Int() \n ) { + say Möbius(n); +} + +multi sub prime-factors(1) { [] } +multi sub prime-factors(Int() $x) { + my $p = (2..^$x).first($x %% *); + return $p ?? [$p, |prime-factors($x div $p)] !! [$x] +} +sub square-free(Int() $x) { + my @p = prime-factors($x); + @p ~~ @p.unique +}; +sub Möbius($x) { + square-free($x) ?? + ( + prime-factors($x).elems %% 2 ?? 1 !! -1 + ) + !! 0; +} -- cgit