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;

class Pg
{
    static void Main()
    {
        var P = new Prime();
        var rd = new Reader();
        var PrmLst = P.GetPrimeNums().ToList();
        rd.Read().ToList().ForEach(n => Console.WriteLine(PrmLst.Where((x,y) => y < n).Sum()));
    }
}
class Prime
{
    const int MAX = 105000;
    internal IEnumerable<int> GetPrimeNums()
    {
        for (int i = 0; i <= MAX; ++i)
        {
            if (IsPrime(i))
                yield return i;
        }
    }
    private bool IsPrime(int num)
    {
        if (num < 2)
            return false;
        else if (num == 2)
            return true;
        else if (num % 2 == 0)
            return false;

        for (int i = 3; i <= Math.Sqrt(num); i += 2)
        {
            if (num % i == 0)
                return false;
        }
        return true;
    }
}
class Reader
{
    internal IEnumerable<int> Read()
    {
        int n;
        while ((n = int.Parse(Console.ReadLine())) != 0)
        {
            yield return n;
        }
    }
}