Problem:
Score : 200 points

Problem Statement

You are given positive integers A and B.

Find the K-th largest positive integer that divides both A and B.

The input guarantees that there exists such a number.

Constraints

All values in input are integers.

1 \leq A, B \leq 100

The K-th largest positive integer that divides both A and B exists.

K \geq 1

Input

Input is given from Standard Input in the following format:

A B K

Output

Print the K-th largest positive integer that divides both A and B.

Sample Input 1

8 12 2

Sample Output 1

2

Three positive integers divides both 8 and 12: 1, 2 and 4.
Among them, the second largest is 2.

Sample Input 2

100 50 4

Sample Output 2

5

Sample Input 3

1 1 1

Sample Output 3

1

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;

namespace ABC120B_K_thCommonDivisor
{
    class Program
    {
        static void Main(string[] args)
        {
#if Local
            var sw = new Stopwatch();
            sw.Start();
            Console.SetIn(new StreamReader("input.in"));
#endif

            var solver = new Solver();
            solver.Solve();
#if Local
            Console.WriteLine($"{sw.ElapsedMilliseconds}ms");
#endif
        }
    }

    class Solver
    {
        public void Solve()
        {
            var input = Console.ReadLine().Split(' ').Select(elem => int.Parse(elem)).ToArray();
            var listA = GetYakusu(input[0]);
            var listB = GetYakusu(input[1]);
            var listKoyaku = GetCommon(listA, listB);

            var answer = listKoyaku[listKoyaku.Count - input[2] - 1];
            Console.WriteLine(answer);
        }

        public List<int> GetCommon(List<int> listA, List<int> listB)
        {
            List<int> ret = new List<int>();
            foreach(var a in listA)
            {
                foreach(var b in listB)
                {
                    if (a == b)
                    {
                        ret.Add(a);
                    }
                }
            }

            return ret;
        }

        public List<int> GetYakusu(int num)
        {
            List<int> ret = new List<int>();
            for (int i = 1; i <= num; i++)
            {
                if ( num % i == 0)
                {
                    ret.Add(i);
                }
            }

            return ret;
        }
    }
}