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)

# AOJ 0056 Goldbach's Conjecture

MAX_N = 50000

# エラトステネスの篩
prime = Array.new(MAX_N + 1, true)

prime[0] = prime[1] = false
max = Math.sqrt(MAX_N).to_i

(2..max).each do |k|
  next unless prime[k]

  l = 2 * k
  while l <= MAX_N
    prime[l] = false
    l += k
  end
end

primes = []
prime.each_with_index do |f, k|
  primes << k if f
end

while line = gets
  n = line.to_i
  break if n.zero?

  n_combinations = 0
  primes.select {|k| k < n}.each do |p1|
    primes.select {|k| k <= p1}.each do |p2|
      break if p1 + p2 > n
      n_combinations += 1 if p1 + p2 == n
    end
  end

  puts n_combinations
end