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: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] ABK = Console.ReadLine().Split(' ').Select(i => int.Parse(i)).ToArray();
            List<int> divisorA = new List<int>();
            List<int> divisorB = new List<int>();
            List<int> result = new List<int>();
            //Aの約数すべて
            for (int j = 1; j < ABK[0]+1; j++)
            {
                if (ABK[0] % j == 0)
                {
                    divisorA.Add(j);
                }
            }
            //Bの約数すべて
            for (int z = 1; z < ABK[1]+1; z++)
            {
                if (ABK[1] % z == 0)
                {
                    divisorB.Add(z);
                }
            }
            //共通約数求め
            for (int p = 0; p < divisorB.Count; p++)
            {
                if (divisorA.Contains(divisorB[p]))
                {
                    result.Add(divisorB[p]);
                }
            }
            result.Sort();
            result.Reverse();
            Console.WriteLine(result[ABK[2]-1]);
        }
    }
}
// 文字列の入力
//string s = Console.ReadLine();

// 整数の入力
//long n = long.Parse(Console.ReadLine());

// 文字列配列の入力
//string[] inputStrArray = Console.ReadLine().Split(' ');

// 整数配列の入力
//long[] inputLongArray = Console.ReadLine().Split(' ').Select(i => long.Parse(i)).ToArray();