Truncatable primes: Difference between revisions

(Added Racket version)
Line 1,166:
};
[left(6),right(6)]</lang>
 
=={{header|Perl}}==
<lang perl>#!/usr/bin/perl
use warnings;
use strict;
 
use constant {
LEFT => 0,
RIGHT => 1,
};
 
{ my @primes = (2, 3);
 
sub is_prime {
my $n = shift;
return if $n < 2;
 
for my $prime (@primes) {
last if $prime >= $n;
return if 0 == $n % $prime;
}
 
my $sqrt = sqrt $n;
while ($primes[-1] < $sqrt) {
my $new = 2 + $primes[-1];
$new += 2 until is_prime($new);
push @primes, $new;
return if 0 == $n % $new;
}
 
return 1;
}
}
 
 
sub trunc {
my ($n, $side) = @_;
my $regex = $side == LEFT ? qr/^./ : qr/.$/;
$n =~ s/$regex//;
return $n;
}
 
 
sub is_tprime {
my ($n, $side) = @_;
return if $n =~ /0/;
return (is_prime($n) and (1 == length $n or is_tprime(trunc($n, $side), $side)));
}
 
 
my $length = 6;
my @tprimes = ('9' x $length) x 2;
for my $side (LEFT, RIGHT) {
$tprimes[$side] -= 2 until is_tprime($tprimes[$side], $side);
}
 
print 'left ', join(', right ', @tprimes), "\n";</lang>
{{out}}
<pre>left 998443, right 739399</pre>
 
=={{header|Perl 6}}==
Anonymous user