Problem:
素数 II

素数というのは、1 よりも大きくそれ自身か 1 でしか割りきれない整数をいいます。例えば、2 は、2 と 1 でしか割り切れないので素数ですが、12 は、12 と 1 のほかに、2, 3, 4, 6 で割りきれる数なので素数ではありません。

整数 n を入力したとき、n より小さい素数のうち最も大きいものと、n より大きい素数のうち最も小さいものを出力するプログラムを作成してください。

Input

複数のデータセットが与えられます。各データセットに n (3 ≤ n ≤ 50,000) が１行に与えられます。

データセットの数は 50 を超えません。

Output

各データセットに対して、n より小さい素数のうち最大のものと、n より大きい素数のうち最小のものを１つのスペースで区切って１行に出力して下さい。

Sample Input

19
3517

Output for the Sample Input

17 23
3511 3527

Solution in C# (judge verdict: Accepted)

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

class Pg
{
    static void Main()
    {
        var P = new Prime();
        const int LASTPRIME = 50021;
        var PrmLst = P.GetPrimeNums(LASTPRIME).ToList();

        string line;
        while ((line = Console.ReadLine()) != null)
        {
            var n = int.Parse(line);
            var prev = PrmLst.Where(x => x < n).Max();
            var next = PrmLst.Where(x => x > n).Min();
            Console.WriteLine("{0} {1}", prev, next);
        }
    }
}
class Prime
{
    internal IEnumerable<int> GetPrimeNums(int last)
    {
        for (int i = 0; i <= last; ++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;
    }
}