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 C# (judge verdict: Accepted)

using System;
using System.Text;

namespace _056_Goldbach_sConjecture
{
	class Program
	{
		static void Main ( string[] args )
		{
			string inputStr;
			StringBuilder output = new StringBuilder (10000 * 3);

			while ((inputStr = Console.ReadLine ()) != "0")
			{
				int inputNum = int.Parse (inputStr);
				int count = 0;

				bool result = Conjecture.IsConjecture (2, inputNum - 2);
				if (result)
					count++;

				for (int lp = 3; lp <= inputNum / 2; lp += 2)
				{
					bool result2 = Conjecture.IsConjecture (lp, inputNum - lp);
					if (result2)
						count++;
				}

				output.AppendLine (count.ToString ());
			}

			Console.Write (output);
		}
	}

	class Conjecture
	{
		static Conjecture ()
		{
			PrimeNumberArray = new int[50000 + 1];

			//2????????°????????????????????????
			PrimeNumberArray[2] = PrimeNumber;
			for (int lp = 2 * 2; lp < PrimeNumberArray.Length; lp += 2)
			{
				PrimeNumberArray[lp] = NotPrimeNumber;
			}

			double limit = Math.Sqrt (50000);
			for (int lp = 3; lp <= limit; lp += 2)
			{
				if (PrimeNumberArray[lp] != NotPrimeNumber)
				{
					//?????????????????????
					for (int lp2 = lp * 2; lp2 < PrimeNumberArray.Length; lp2 += lp)
					{
						PrimeNumberArray[lp2] = NotPrimeNumber;
					}
				}
			}
		}

		private static int[] PrimeNumberArray;
		private const int PrimeNumber = 0;
		private const int NotPrimeNumber = int.MinValue;
		
		public static bool IsConjecture ( int num, int num2 )
		{
			return
				(PrimeNumberArray[num2] == PrimeNumber) &&
				(PrimeNumberArray[num] == PrimeNumber);
		}
	}
}