Truncatable primes: Difference between revisions

Added Wren
m (→‎{{header|REXX}}: changed a comment.)
(Added Wren)
Line 3,167:
Largest RTP from 1..1000000: 739399
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>
 
9,477

edits