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)

max = 50000
prime = [2]
list = Array.new(max){|i| i}
list[0] = 0
list[1] = 0
loop do
  a = prime[-1]
  break if a >= Math.sqrt(max)
  i = a
  while i <= max
    list[i] = 0
    i += a
  end
  while list[a] == 0
    a += 1
  end
  prime << list[a]
  list[a] = 0
end
prime += list - [0]

p = {}
prime.each{|i|
  p[i] = true
}

while n = gets.to_i
  break if n == 0
  count = 0
  i = 0
  loop do
    break if prime[i] > n / 2
    if p[n - prime[i]]
      count += 1
    end
    i += 1
  end
  puts count
end