Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
36
Task/Stern-Brocot-sequence/Perl/stern-brocot-sequence-1.pl
Normal file
36
Task/Stern-Brocot-sequence/Perl/stern-brocot-sequence-1.pl
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub stern_brocot {
|
||||
my @list = (1, 1);
|
||||
sub {
|
||||
push @list, $list[0] + $list[1], $list[1];
|
||||
shift @list;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
my $generator = stern_brocot;
|
||||
print join ' ', map &$generator, 1 .. 15;
|
||||
print "\n";
|
||||
}
|
||||
|
||||
for (1 .. 10, 100) {
|
||||
my $index = 1;
|
||||
my $generator = stern_brocot;
|
||||
$index++ until $generator->() == $_;
|
||||
print "first occurrence of $_ is at index $index\n";
|
||||
}
|
||||
|
||||
{
|
||||
sub gcd {
|
||||
my ($u, $v) = @_;
|
||||
$v ? gcd($v, $u % $v) : abs($u);
|
||||
}
|
||||
my $generator = stern_brocot;
|
||||
my ($a, $b) = ($generator->(), $generator->());
|
||||
for (1 .. 1000) {
|
||||
die "unexpected GCD for $a and $b" unless gcd($a, $b) == 1;
|
||||
($a, $b) = ($b, $generator->());
|
||||
}
|
||||
}
|
||||
19
Task/Stern-Brocot-sequence/Perl/stern-brocot-sequence-2.pl
Normal file
19
Task/Stern-Brocot-sequence/Perl/stern-brocot-sequence-2.pl
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
use ntheory qw/gcd vecsum vecfirst/;
|
||||
|
||||
sub stern_diatomic {
|
||||
my ($p,$q,$i) = (0,1,shift);
|
||||
while ($i) {
|
||||
if ($i & 1) { $p += $q; } else { $q += $p; }
|
||||
$i >>= 1;
|
||||
}
|
||||
$p;
|
||||
}
|
||||
|
||||
my @s = map { stern_diatomic($_) } 1..15;
|
||||
print "First fifteen: [@s]\n";
|
||||
@s = map { my $n=$_; vecfirst { stern_diatomic($_) == $n } 1..10000 } 1..10;
|
||||
print "Index of 1-10 first occurrence: [@s]\n";
|
||||
print "Index of 100 first occurrence: ", (vecfirst { stern_diatomic($_) == 100 } 1..10000), "\n";
|
||||
print "The first 999 consecutive pairs are ",
|
||||
(vecsum( map { gcd(stern_diatomic($_),stern_diatomic($_+1)) } 1..999 ) == 999)
|
||||
? "all coprime.\n" : "NOT all coprime!\n";
|
||||
Loading…
Add table
Add a link
Reference in a new issue