Truncatable primes: Difference between revisions

Content deleted Content added
Number base is 10
→‎{{header|Perl 6}}: replace with much faster version
Line 1,095: Line 1,095:


=={{header|Perl 6}}==
=={{header|Perl 6}}==
<lang perl6>my @primes := 2, 3, 5, -> $p {
{{works with|Rakudo Star|2010.09}}
($p+2, $p+4 ... -> $i { $i %% none @primes ... * >= sqrt $i })[*-1]
} ... *;


sub prime($i) { (state @)[$i] //= $i %% none @primes ... * >= sqrt $i }
This uses a fairly naive isprime routine. It works but is slow.


sub ltp {
<lang perl6>
for (9...1) X (9...1) X (9...1) X (9...1) X (9...1) X (9,7,3) -> $a,$b,$c,$d,$e,$f {
use v6;
my %cache = <2 3 5 7 11 13 17 19 23> >>=>>> 1;
my @x := [\+] $f, $e, $d, $c, $b, $a Z* (1,10,100 ... *);
return @x[*-1] if prime @x[0] && prime @x[1] && prime @x[2] &&

prime @x[3] && prime @x[4] && prime @x[5];
sub isprime ($test) {
}
return %cache{$test} if defined %cache{$test};
return (%cache{$test} = 0) if $test <= 25;
my $r = floor($test ** .5);
return (%cache{$test} = 0) unless $test % $_ for (2, 3, * + 2 ... * >= $r);
return (%cache{$test} = 1);
}
}


sub trunc_prime ($type, $limit is copy) {
sub infix:<*+> ($a,$b) { $a * 10 + $b }

$limit += ($limit % 2 ?? 0 !! 1);
sub rtp {
for ($limit, * - 2 ... * < 2 ) -> $loop {
for 7,5,3 {
next if $loop ~~ /0/; # No zeros allowed
for grep &prime, ($_ X*+ 9,7,3,1) {
my $this = $loop;
while $this.&isprime {
for grep &prime, ($_ X*+ 9,7,3,1) {
for grep &prime, ($_ X*+ 9,7,3,1) {
$this.=subst($type, '');
for grep &prime, ($_ X*+ 9,7,3,1) {
return $loop unless $this;
for grep &prime, ($_ X*+ 9,7,3,1) {
}
return $_;
}
}
}
}
}
}
}
}
}


say "Highest ltp: ", ltp;
say "Largest Left Truncatable Prime < 1000000: ",trunc_prime(rx/^\d/, 1000000);
say "Highest rtp: ", rtp;</lang>
say "Largest Right Truncatable Prime < 1000000: ",trunc_prime(rx/\d$/, 1000000);
{{out}}
</lang>
<pre>Highest ltp: 999983
Output:
Highest rtp: 739399</pre>
<pre>
Largest Left Truncatable Prime < 1000000: 998443
Largest Right Truncatable Prime < 1000000: 739339
</pre>


=={{header|PicoLisp}}==
=={{header|PicoLisp}}==