32 lines
767 B
Text
32 lines
767 B
Text
func is_unprimeable(n) {
|
|
var t = 10*floor(n/10)
|
|
for k in (t+1 .. t+9 `by` 2) {
|
|
return false if k.is_prime
|
|
}
|
|
|
|
if (n.is_div(2) || n.is_div(5)) {
|
|
return true if !is_prime(n%10)
|
|
return true if (n % 10**n.ilog(10) > 9)
|
|
}
|
|
|
|
for k in (1 .. n.ilog(10)) {
|
|
var u = 10**k
|
|
var v = (n - (u * (floor(n/u) % 10)))
|
|
0..9 -> any {|d| is_prime(v + d*u) } && return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
with (35) {|n|
|
|
say ("First #{n} unprimeables:\n", is_unprimeable.first(n).join(' '))
|
|
}
|
|
|
|
with (600) {|n|
|
|
say ("\n#{n}th unprimeable: ", is_unprimeable.nth(n), "\n")
|
|
}
|
|
|
|
for d in (0..9) {
|
|
say ("First unprimeable that ends with #{d}: ",
|
|
1..Inf -> lazy.map {|k| k*10 + d }.grep(is_unprimeable).first)
|
|
}
|