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++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>
#define pb push_back
#define all(v) (v).begin() , (v).end()
#define popcnt(x) __builtin_popcount(x)
#define inf 0x3f3f3f3f
#define watch(x) cout << (#x) << " is " << (x) << endl
#define rand() (rand() << 15 | rand())

using namespace std;
typedef long long  ll;

int main(){

    ios::sync_with_stdio(0) , cin.tie(0) , cout.tie(0);
    int a , b , k;
    cin >> a >> b >> k;

    set<int> s;
    for(int i = 1 ; i * i <= a ; ++i){
        if(a % i == 0){
            s.insert(i);
            if(i != a / i)s.insert(a / i);
        }
    }

    for(int i = 1 ; i * i <= b ; ++i){
        if(b % i == 0){
            if(s.find(i) != s.end())s.insert(i);
            if(i != b / i)if(s.find(b / i) != s.end())s.insert(b / i);
        }
    }

    while(--k)
        s.erase(s.begin());

    cout << *s.begin() << "\n";
}