How to calculate all the less than 500 additive prime numbers in Ruby

1 Answer

0 votes
# Additive primes: primes whose sum of digits is also prime

# Check if a number is prime
def prime?(n)
  return false if n < 2
  return n == 2 if n.even?
  return n == 3 if n % 3 == 0

  i = 5
  while i * i <= n
    return false if n % i == 0
    i += 2
    return false if n % i == 0
    i += 4
  end

  true
end

# Compute the sum of digits of a number
def sum_digits(n)
  sum = 0
  while n > 0
    sum += n % 10
    n /= 10
  end
  sum
end

# Check if a number is an additive prime
def additive_prime?(n)
  prime?(n) && prime?(sum_digits(n))
end

TOP = 500
count = 0
line = ""

(1...TOP).each do |n|
  if additive_prime?(n)
    line << n.to_s.rjust(3) + " "
    count += 1

    if count % 10 == 0
      puts line.rstrip
      line = ""
    end
  end
end

puts line.rstrip unless line.empty?
puts
puts "Total additive primes = #{count}"



=begin
run:

  2   3   5   7  11  23  29  41  43  47
 61  67  83  89 101 113 131 137 139 151
157 173 179 191 193 197 199 223 227 229
241 263 269 281 283 311 313 317 331 337
353 359 373 379 397 401 409 421 443 449
461 463 467 487

Total additive primes = 54
=end

 



answered May 4 by avibootz
...