Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
33
Task/Vampire-number/Perl/vampire-number-1.pl
Normal file
33
Task/Vampire-number/Perl/vampire-number-1.pl
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/perl
|
||||
use warnings;
|
||||
use strict;
|
||||
use feature qw(say);
|
||||
|
||||
sub fangs {
|
||||
my $vampire = shift;
|
||||
my $length = length 0 + $vampire;
|
||||
return if $length % 2;
|
||||
my $fang_length = $length / 2;
|
||||
my $from = '1' . '0' x ($fang_length - 1);
|
||||
my $to = '9' x $fang_length;
|
||||
my $sorted = join q(), sort split //, $vampire;
|
||||
my @fangs;
|
||||
for my $f1 ($from .. 1 + sqrt $vampire) {
|
||||
next if $vampire % $f1;
|
||||
my $f2 = $vampire / $f1;
|
||||
next if $sorted ne join q(), sort split //, $f1 . $f2;
|
||||
next if 2 == grep '0' eq substr($_, -1 , 1), $f1, $f2; # Needed for the 26th number.
|
||||
push @fangs, [$f1, $f2];
|
||||
}
|
||||
return @fangs;
|
||||
}
|
||||
|
||||
my $count = 0;
|
||||
my $i = 9;
|
||||
while ($count < 25) {
|
||||
$i++;
|
||||
my @f = fangs($i);
|
||||
$count++, say join ' ', "$count. $i:", map "[@$_]", @f if @f;
|
||||
}
|
||||
|
||||
say join ' ', $_, map "[@$_]", fangs($_) for 16758243290880, 24959017348650, 14593825548650;
|
||||
45
Task/Vampire-number/Perl/vampire-number-2.pl
Normal file
45
Task/Vampire-number/Perl/vampire-number-2.pl
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
use ntheory qw(sqrtint logint divisors);
|
||||
|
||||
sub is_vampire {
|
||||
my ($n) = @_;
|
||||
|
||||
return if (length($n) % 2 or $n < 0);
|
||||
|
||||
my $l1 = 10**logint(sqrtint($n), 10);
|
||||
my $l2 = sqrtint($n);
|
||||
|
||||
my $s = join('', sort split(//, $n));
|
||||
|
||||
my @fangs;
|
||||
|
||||
foreach my $d (divisors($n)) {
|
||||
|
||||
$d < $l1 and next;
|
||||
$d > $l2 and last;
|
||||
|
||||
my $t = $n / $d;
|
||||
|
||||
next if ($d % 10 == 0 and $t % 10 == 0);
|
||||
next if (join('', sort split(//, "$d$t")) ne $s);
|
||||
|
||||
push @fangs, [$d, $t];
|
||||
}
|
||||
|
||||
return @fangs;
|
||||
}
|
||||
|
||||
print "First 25 Vampire Numbers:\n";
|
||||
|
||||
for (my ($n, $i) = (1, 1) ; $i <= 25 ; ++$n) {
|
||||
if (my @fangs = is_vampire($n)) {
|
||||
printf("%2d. %6s : %s\n", $i++, $n, join(' ', map { "[@$_]" } @fangs));
|
||||
}
|
||||
}
|
||||
|
||||
print "\nIndividual tests:\n";
|
||||
|
||||
foreach my $n (16758243290880, 24959017348650, 14593825548650) {
|
||||
my @fangs = is_vampire($n);
|
||||
print("$n: ", (@fangs ? join(' ', map { "[@$_]" } @fangs)
|
||||
: "is not a vampire number"), "\n");
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue