Primes which contain only one odd digit: Difference between revisions

Content added Content deleted
m (→‎{{header|Sidef}}: minor optimizations)
Line 880: Line 880:
=={{header|Sidef}}==
=={{header|Sidef}}==
<lang ruby>func primes_with_one_odd_digit(upto, base = 10) {
<lang ruby>func primes_with_one_odd_digit(upto, base = 10) {

upto = prev_prime(upto+1)


var list = []
var list = []
Line 889: Line 891:
list << digits.grep { .is_odd && .is_prime && !.is_coprime(base) }...
list << digits.grep { .is_odd && .is_prime && !.is_coprime(base) }...


for k in (0 .. upto.len(base)-1) {
for k in (0 .. upto.ilog(base)) {
even_digits.variations_with_repetition(k, {|*a|
even_digits.variations_with_repetition(k, {|*a|
next if (a.last == 0)
next if (a.last == 0)
break if ([1, a...].digits2num(base) > upto)
var v = a.digits2num(base)
odd_digits.each {|d|
odd_digits.each {|d|
var n = [d, a...].digits2num(base)
var n = (v*base + d)
list << n if n.is_prime
list << n if (n.is_prime && (n <= upto))
}
}
})
})