Problem:
ゴールドバッハの予想

4 以上の偶数は 2 つの素数の和で表すことができるということが知られています。これはゴールドバッハ予想といい、コンピュータの計算によりかなり大きな数まで正しいことが確かめられています。例えば、10 は、7 + 3、5 + 5 の 2 通りの素数の和で表すことができます。

整数 n を入力し、n を 2 つの素数の和で表す組み合わせ数が何通りあるかを出力するプログラムを作成してください。ただし、n は 4 以上、50,000 以下とします。また、入力される n は偶数であるとはかぎりません。

Input

複数のデータセットが与えられます。各データセットに n が１行に与えられます。n が 0 のとき入力の最後とします。データセットの数は 10,000 を超えません。

Output

各データセットに対して、n を 2 つの素数の和で表す組み合わせ数を１行に出力して下さい。

Sample Input

10
11
0

Output for the Sample Input

2
0

Solution in Ruby (judge verdict: Accepted)

def get_prime_nums(max_p)
  primes = (0..max_p).map{true}
  primes[0] = primes[1] = false

  smp = Math::sqrt(0.5 + max_p).to_i

  for p in (2..smp)
    if (primes[p])
      (p * p).step(max_p, p){|q| primes[q] = false}
    end
  end
  #puts "#{primes.select{|p| p }.length} primes"

  return primes
end

### main

max_p = 60000
primes = get_prime_nums(max_p)

p_nums = (2..max_p).select{|p| primes[p]}

while true
  n = gets.chomp.to_i
  break if n == 0

  count = 0

  for p in p_nums
    q = n - p
    break if p > q

    if primes[q]
      count += 1
      #puts "#{p}+#{q}"
    end
  end

  puts count
end