Truncatable primes: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: changed a comment.) |
(Added Wren) |
||
Line 3,167: | Line 3,167: | ||
Largest RTP from 1..1000000: 739399 |
Largest RTP from 1..1000000: 739399 |
||
Elapse Time(seconds) : 49 |
Elapse Time(seconds) : 49 |
||
</pre> |
|||
=={{header|Wren}}== |
|||
<lang ecmascript>import "/fmt" for Fmt |
|||
var sieve = Fn.new { |limit| |
|||
limit = limit + 1 |
|||
// true denotes composite, false denotes prime |
|||
var c = List.filled(limit, false) |
|||
c[0] = true |
|||
c[1] = true |
|||
// no need to bother with even numbers over 2 for this task |
|||
var p = 3 // Start from 3. |
|||
while (true) { |
|||
var p2 = p * p |
|||
if (p2 >= limit) break |
|||
var i = p2 |
|||
while (i < limit) { |
|||
c[i] = true |
|||
i = i + 2*p |
|||
} |
|||
while (true) { |
|||
p = p + 2 |
|||
if (!c[p]) break |
|||
} |
|||
} |
|||
return c |
|||
} |
|||
var limit = 999999 |
|||
var c = sieve.call(limit) |
|||
var leftFound = false |
|||
var rightFound = false |
|||
System.print("Largest truncatable primes less than a million:") |
|||
var i = limit |
|||
while (i > 2) { |
|||
if (!c[i]) { |
|||
if (!rightFound) { |
|||
var p = (i/10).floor |
|||
while (p > 0) { |
|||
if (p%2 == 0 || c[p]) break |
|||
p = (p/10).floor |
|||
} |
|||
if (p == 0) { |
|||
System.print(" Right truncatable prime = %(Fmt.dc(0, i))") |
|||
rightFound = true |
|||
if (leftFound) return |
|||
} |
|||
} |
|||
if (!leftFound) { |
|||
var q = i.toString[1..-1] |
|||
if (!q.contains("0")) { |
|||
var p = Num.fromString(q) |
|||
while (q.count > 0) { |
|||
if (p%2 == 0 || c[p]) break |
|||
q = q[1..-1] |
|||
p = Num.fromString(q) |
|||
} |
|||
if (q == "") { |
|||
System.print(" Left truncatable prime = %(Fmt.dc(0, i))") |
|||
leftFound = true |
|||
if (rightFound) return |
|||
} |
|||
} |
|||
} |
|||
} |
|||
i = i - 2 |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Largest truncatable primes less than a million: |
|||
Left truncatable prime = 998,443 |
|||
Right truncatable prime = 739,399 |
|||
</pre> |
</pre> |
||