Truncatable primes: Difference between revisions

Content added Content deleted
m (→‎{{header|REXX}}: updated the OUTPUT section. -- ~~~~)
(Updated D entry)
Line 484: Line 484:


=={{header|D}}==
=={{header|D}}==
<lang d>import std.stdio, std.math, std.string, std.conv;
<lang d>import std.stdio, std.math, std.string, std.conv, std.algorithm,
std.range;


bool isPrime(int n) {
bool isPrime(in int n) pure nothrow {
if (n <= 1)
if (n <= 1)
return false;
return false;
foreach (i; 2 .. cast(int)sqrt(cast(real)n) + 1)
foreach (immutable i; 2 .. cast(int)sqrt(cast(real)n) + 1)
if (!(n % i))
if (!(n % i))
return false;
return false;
return true;
return true;
}
}


bool isTruncatablePrime(bool left)(int n) {
bool isTruncatablePrime(bool left)(in int n) pure {
string s = to!string(n);
immutable s = n.text;
if (indexOf(s, '0') != -1)
if (s.canFind('0'))
return false;
foreach (i; 0 .. s.length)
static if (left) {
if (!isPrime(to!int(s[i .. $])))
return false;
} else {
if (!isPrime(to!int(s[0 .. i+1])))
return false;
return false;
foreach (immutable i; 0 .. s.length)
}
static if (left) {
return true;
if (!s[i .. $].to!int.isPrime)
return false;
} else {
if (!s[0 .. i + 1].to!int.isPrime)
return false;
}
return true;
}
}


void main() {
void main() {
enum int n = 1_000_000;
enum n = 1_000_000;
writeln("Largest left-truncatable prime in 2 .. ", n, ": ",
foreach_reverse (i; 2 .. n)
if (isTruncatablePrime!true(i)) {
iota(n, 1, -1).filter!(isTruncatablePrime!true).front);
writeln("Largest left-truncatable prime in 2 .. ", n, ": ", i);
writeln("Largest right-truncatable prime in 2 .. ", n, ": ",
iota(n, 1, -1).filter!(isTruncatablePrime!false).front);
break;
}
foreach_reverse (i; 2 .. n)
if (isTruncatablePrime!false(i)) {
writeln("Largest right-truncatable prime in 2 .. ", n, ": ", i);
break;
}
}</lang>
}</lang>
{{out}}
Output:
<pre>Largest left-truncatable prime in 2 .. 1000000: 998443
<pre>Largest left-truncatable prime in 2 .. 1000000: 998443
Largest right-truncatable prime in 2 .. 1000000: 739399</pre>
Largest right-truncatable prime in 2 .. 1000000: 739399</pre>