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: Time Limit Exceeded)

def sieve(n)
  ps = Array.new(n + 1, true)
  ps[0] = false
  ps[1] = false

  2.upto(n-1) do |i|
    next unless ps[i]

    k = 2
    while k * i <= n
      ps[k * i] = false
      k += 1
    end
  end

  ps
end

def solve(n, ps)
  ans = 0
  2.upto(n/2) do |a|
    next unless ps[a]
    b = n - a
    ans += 1 if ps[b]
  end
  ans
end

ps = sieve(50000)

while true
  n = gets.to_i
  break if n == 0
  puts solve(n, ps)
end