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)

not_prime = Array.new(5133, false)

not_prime[0] = true
not_prime[1] = true

not_prime.each_with_index {|elem, i|

    if i <= 1 or i > Math.sqrt(5133) then
      next
    end

    if not_prime[i] == false   
      j = 2 * i
      while j <= 104730
        not_prime[j] = true
        j += i
      end
    end
}

# not_prime.each_with_index {|elem, i|

#   if i <= 100 and not_prime[i] == true then
#     puts i
#   end

# }

# puts "Input a string"

while (n = gets.to_i) > 0

  ans = 0

  index = 2 

  (n/2-1).times {

    if not_prime[index] == false and not_prime[n-index] == false then
      ans += 1
    end

    index += 1
  }

  puts ans

end