Problem:
素数の和

p(i) を小さい方から i 番目の素数とします。例えば、7 は、2, 3, 5, 7 と小さい方から 4 番目の素数なので、p(4) = 7 です。

n が与えられたとき、i = 1 から n までの p(i) の和 s

s = p(1) + p(2) + .... + p(n)

を出力するプログラムを作成してください。例えば、n = 9 のとき、s = 2 + 3 + 5 + 7 + 11 + 13 + 17 + 19 + 23 = 100 となります。

Input

複数のデータセットが与えられます。各データセットに整数 n (n ≤ 10000) が与えられます。n が 0 のとき入力の最後とします。データセットの数は 50 を超えません。

Output

各データセットの n に対して、s を１行に出力して下さい。

Sample Input

2
9
0

Output for the Sample Input

5
100

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mondai0053
{
	class Program
	{
		static void Main(string[] args)
		{
			var	prime	= new long[ 10000 ];
			int	cnt		= 0;
			for( long i = 2; ; i++ ) {
				if( is_prime( i ) ) {
					prime[ cnt ]	= i;
					cnt++;
					if( cnt >= 10000 ) {
						break;
					}
				}
			}
		
			while( true ) {
				var	n	= int.Parse( Console.ReadLine() );
				if( n == 0 ) {
					break;
				}
				long	sum	= 0; 
				for( int i = 0; i < n; i++ ) {
					sum	+= prime[ i ];
				}
				Console.WriteLine( sum );
			}
		
		
		}

        // 素数判定
		static bool is_prime( long n )
		{
			if( n <= 1 ) {
				return( false );
			} else if( n <= 3 ) {
				return( true );
			} else if( (n % 2) == 0 ) {
				return( false );
			} else {
				for( int i = 3; i <= (int)Math.Sqrt( n ); i += 2 ) {
					if( (n % i) == 0 ) {
						return( false );
					}
				}
			}
			return( true );
		} 
	}
}