diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-04-10 16:53:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-10 16:53:09 +0100 |
| commit | a37a51906a2a45a3276840a9d4eed218df692c2f (patch) | |
| tree | d37814dca89f3059c49cfe7edf6d3464cb001091 /challenge-159 | |
| parent | b338f1334ce67fbbdf66b7e036f1e2827ac706a2 (diff) | |
| parent | 1f7f29d2e29e3d87aa552f2e4d4c15957078393b (diff) | |
| download | perlweeklychallenge-club-a37a51906a2a45a3276840a9d4eed218df692c2f.tar.gz perlweeklychallenge-club-a37a51906a2a45a3276840a9d4eed218df692c2f.tar.bz2 perlweeklychallenge-club-a37a51906a2a45a3276840a9d4eed218df692c2f.zip | |
Merge pull request #5905 from adamcrussell/challenge-159
Challenge 159
Diffstat (limited to 'challenge-159')
| -rw-r--r-- | challenge-159/adam-russell/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-159/adam-russell/perl/ch-1.pl | 25 | ||||
| -rw-r--r-- | challenge-159/adam-russell/perl/ch-2.pl | 41 |
3 files changed, 67 insertions, 0 deletions
diff --git a/challenge-159/adam-russell/blog.txt b/challenge-159/adam-russell/blog.txt new file mode 100644 index 0000000000..bec9274e05 --- /dev/null +++ b/challenge-159/adam-russell/blog.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/perl/2022/04/10 diff --git a/challenge-159/adam-russell/perl/ch-1.pl b/challenge-159/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..8d36c68b9b --- /dev/null +++ b/challenge-159/adam-russell/perl/ch-1.pl @@ -0,0 +1,25 @@ +use strict; +use warnings; +## +# You are given a positive number, $n. Write a script +# to compute the Farey Sequence of the order $n. +## +use POSIX; + +sub farey{ + my($order) = @_; + my @farey; + my($s, $t, $u, $v, $x, $y) = (0, 1, 1, $order, 0, 0); + push @farey, "$s/$t", "$u/$v"; + while($y != 1 && $order > 1){ + $x = POSIX::floor(($t + $order) / $v) * $u - $s; + $y = POSIX::floor(($t + $order) / $v) * $v - $t; + push @farey, "$x/$y"; + ($s, $t, $u, $v) = ($u, $v, $x, $y); + } + return @farey; +} + +MAIN:{ + print join(", ", farey(7)) . "\n"; +}
\ No newline at end of file diff --git a/challenge-159/adam-russell/perl/ch-2.pl b/challenge-159/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..725bf897af --- /dev/null +++ b/challenge-159/adam-russell/perl/ch-2.pl @@ -0,0 +1,41 @@ +use strict; +use warnings; +## +# You are given a positive number $n. Write a script +# to generate the Moebius Number for the given number. +## +use POSIX; +use Math::Complex; + +sub farey{ + my($order) = @_; + my @farey; + my($s, $t, $u, $v, $x, $y) = (0, 1, 1, $order, 0, 0); + push @farey, "$s/$t", "$u/$v"; + while($y != 1 && $order > 1){ + $x = POSIX::floor(($t + $order) / $v) * $u - $s; + $y = POSIX::floor(($t + $order) / $v) * $v - $t; + push @farey, "$x/$y"; + ($s, $t, $u, $v) = ($u, $v, $x, $y); + } + return @farey; +} + +sub mertens{ + my($n) = @_; + my @farey = farey($n); + my $mertens = 0; + map {$mertens += exp(2 * M_PI * i * eval($_))} @farey; + $mertens += -1; + return Re($mertens); +} + +sub moebius{ + my($n) = @_; + return 1 if $n == 1; + return sprintf("%.f", (mertens($n) - mertens($n - 1))); +} + +MAIN:{ + map {print moebius($_) . "\n"} (5, 10, 20); +}
\ No newline at end of file |
