Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
33
Task/Calkin-Wilf-sequence/Perl/calkin-wilf-sequence.pl
Normal file
33
Task/Calkin-Wilf-sequence/Perl/calkin-wilf-sequence.pl
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
use feature qw(say state);
|
||||
|
||||
use ntheory 'fromdigits';
|
||||
use List::Lazy 'lazy_list';
|
||||
use Math::AnyNum ':overload';
|
||||
|
||||
my $calkin_wilf = lazy_list { state @cw = 1; push @cw, 1 / ( (2 * int $cw[0]) + 1 - $cw[0] ); shift @cw };
|
||||
|
||||
sub r2cf {
|
||||
my($num, $den) = @_;
|
||||
my($n, @cf);
|
||||
my $f = sub { return unless $den;
|
||||
my $q = int($num/$den);
|
||||
($num, $den) = ($den, $num - $q*$den);
|
||||
$q;
|
||||
};
|
||||
push @cf, $n while defined($n = $f->());
|
||||
reverse @cf;
|
||||
}
|
||||
|
||||
sub r2cw {
|
||||
my($num, $den) = @_;
|
||||
my $bits;
|
||||
my @f = r2cf($num, $den);
|
||||
$bits .= ($_%2 ? 0 : 1) x $f[$_] for 0..$#f;
|
||||
fromdigits($bits, 2);
|
||||
}
|
||||
|
||||
say 'First twenty terms of the Calkin-Wilf sequence:';
|
||||
printf "%s ", $calkin_wilf->next() for 1..20;
|
||||
say "\n\n83116/51639 is at index: " . r2cw(83116,51639);
|
||||
Loading…
Add table
Add a link
Reference in a new issue