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, |
||
⚫ | |||
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 { |
||
immutable s = n.text; |
|||
if ( |
if (s.canFind('0')) |
||
⚫ | |||
⚫ | |||
⚫ | |||
if (!isPrime(to!int(s[i .. $]))) |
|||
⚫ | |||
⚫ | |||
if (!isPrime(to!int(s[0 .. i+1]))) |
|||
return false; |
return false; |
||
⚫ | |||
⚫ | |||
⚫ | |||
return true; |
|||
if (!s[i .. $].to!int.isPrime) |
|||
⚫ | |||
⚫ | |||
if (!s[0 .. i + 1].to!int.isPrime) |
|||
return false; |
|||
⚫ | |||
⚫ | |||
} |
} |
||
void main() { |
void main() { |
||
enum n = 1_000_000; |
|||
⚫ | |||
foreach_reverse (i; 2 .. n) |
|||
iota(n, 1, -1).filter!(isTruncatablePrime!true).front); |
|||
writeln("Largest right-truncatable prime in 2 .. ", n, ": ", |
|||
⚫ | |||
⚫ | |||
} |
|||
foreach_reverse (i; 2 .. n) |
|||
⚫ | |||
⚫ | |||
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> |