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: Wrong Answer)

n = 50000
sn = n**0.5 + 1
is_prime = [false, false] + [true] * (n - 1)

(2..sn).each do |i|
  next unless is_prime[i]
  (i*i).step(n, i).each do |j|
    is_prime[j] = false
  end
end

pl = (2..n).map.select{ |i| is_prime[i] }

while gets do
  n = $_.to_i
  count = 0

  tmp = pl.dup
  l = tmp.shift
  r = tmp.pop
  until tmp.empty? do
    if (l + r) == n
      count += 1
      l = tmp.shift
    elsif (l + r) > n
      r = tmp.pop
    else
      l = tmp.shift
    end
  end

  if r*2 == n or l*2 == n or (l + r) == n
    count += 1
  end
  puts count
end