31 lines
738 B
Text
31 lines
738 B
Text
func forprimes(a, b, callback) {
|
|
for (var p = a.dec.next_prime; p <= b; p.next_prime!) {
|
|
callback(p)
|
|
}
|
|
}
|
|
|
|
func is_emirp(p) {
|
|
var str = Str(p)
|
|
var rev = str.reverse
|
|
(str != rev) && is_prime(Num(rev))
|
|
}
|
|
|
|
func emirp_list(count) {
|
|
var i = 13
|
|
var inc = (100 + 10*count)
|
|
var n = []
|
|
while (n.len < count) {
|
|
forprimes(i, i+inc - 1, {|p|
|
|
is_emirp(p) && (n << p)
|
|
})
|
|
(i, inc) = (i+inc, int(inc * 1.03) + 1000)
|
|
}
|
|
n.splice(count)
|
|
return n
|
|
}
|
|
|
|
say ("First 20: ", emirp_list(20).join(' '))
|
|
say ("Between 7700 and 8000: ", gather {
|
|
forprimes(7700, 8000, {|p| is_emirp(p) && take(p) })
|
|
}.join(' '))
|
|
say ("The 10,000'th emirp: ", emirp_list(10000)[-1])
|