Vampire number: Difference between revisions
Content added Content deleted
(Added Sidef) |
(→{{header|Perl}}: added a faster Perl version, using the "ntheory" library) |
||
Line 2,258: | Line 2,258: | ||
say join ' ', $_, map "[@$_]", fangs($_) for 16758243290880, 24959017348650, 14593825548650;</lang> |
say join ' ', $_, map "[@$_]", fangs($_) for 16758243290880, 24959017348650, 14593825548650;</lang> |
||
A faster version, using the `divisors()` function from the ntheory library. |
|||
{{trans|Sidef}} |
|||
<lang perl>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"); |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
First 25 Vampire Numbers: |
|||
1. 1260 : [21 60] |
|||
2. 1395 : [15 93] |
|||
3. 1435 : [35 41] |
|||
4. 1530 : [30 51] |
|||
5. 1827 : [21 87] |
|||
6. 2187 : [27 81] |
|||
7. 6880 : [80 86] |
|||
8. 102510 : [201 510] |
|||
9. 104260 : [260 401] |
|||
10. 105210 : [210 501] |
|||
11. 105264 : [204 516] |
|||
12. 105750 : [150 705] |
|||
13. 108135 : [135 801] |
|||
14. 110758 : [158 701] |
|||
15. 115672 : [152 761] |
|||
16. 116725 : [161 725] |
|||
17. 117067 : [167 701] |
|||
18. 118440 : [141 840] |
|||
19. 120600 : [201 600] |
|||
20. 123354 : [231 534] |
|||
21. 124483 : [281 443] |
|||
22. 125248 : [152 824] |
|||
23. 125433 : [231 543] |
|||
24. 125460 : [204 615] [246 510] |
|||
25. 125500 : [251 500] |
|||
Individual tests: |
|||
16758243290880: [1982736 8452080] [2123856 7890480] [2751840 6089832] [2817360 5948208] |
|||
24959017348650: [2947050 8469153] [2949705 8461530] [4125870 6049395] [4129587 6043950] [4230765 5899410] |
|||
14593825548650: is not a vampire number |
|||
</pre> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |