Primes whose first and last number is 3
func numbers_with_edges(upto, base = 10, s = [3]) {
Enumerator({|callback|
callback(s.digits2num(base))
for k in (0 .. base**(upto.len(base) - 2*s.len)) {
break if (s + k.digits(base) + s -> digits2num(base) > upto)
Inf.times { |j|
var d = (s + k.digits(base) + j.of(0) + s)
var n = d.digits2num(base)
(n <= upto) ? callback(n) : break
}
}
})
}
with (4e3) { |n|
var list = numbers_with_edges(n).grep{.is_prime}.sort
say "There are #{list.len} primes <= #{n.commify} which begin and end in 3:"
list.each_slice(10, {|*a| say a.map { '%5s' % _ }.join(' ') })
}
with (1e6) {|n|
var count = numbers_with_edges(n).grep{.is_prime}.len
say "\nThere are #{count} primes <= #{n.commify} which begin and end in 3"
}Output:
Last updated
Was this helpful?