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 (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {

char inp[100];
int i;
int year;
double nm;
int c,j,count;
char str[100]={'\0'};
char *ln;

fgets(str, 100, stdin); // 入力："123456\n"
ln = strchr(str, '\n'); /* 改行文字を検索 */
if (ln != NULL) { /* 改行が読み取られていたかどうか */
   *ln = '\0';    /* 改行文字を終端文字に置き換える */
}
else {            /* 入力ストリーム上に文字が残ってる場合 */
   while (1) {    /* 改行文字が読み取られるまで空読みする */
       c = getchar();
      if (c == '\n' || c == EOF) break;
   }
}

//printf("%s\n",str);



//double sum=0;

//sscanf(str, "%d", &year);
//printf("%d\n",year);

//for(i=1;i<=year;i++){




//fgets(str, 100, stdin); // 入力："123456\n"
//ln = strchr(str, '\n'); /* 改行文字を検索 */
//if (ln != NULL) { /* 改行が読み取られていたかどうか */
//   *ln = '\0';    /* 改行文字を終端文字に置き換える */
//}
//else {            /* 入力ストリーム上に文字が残ってる場合 */
//   while (1) {    /* 改行文字が読み取られるまで空読みする */
//       c = getchar();
//      if (c == '\n' || c == EOF) break;
//   }
//}

//printf("%s\n",str);



int a,b;

 sscanf(str, "%d %d %d", &a, &b, &c);

//printf("%d\n",a);
//printf("%d\n",b);
//printf("%d\n",c);

int d;
int e=0;

if(a>b){
	for(i=0;i<a;i++){
	if(a%(i+1)==0 && b%(i+1)==0){
//		printf("%d\n",i+1);
		e=e+1;
//		if(e==c){
//		printf("%d\n",i+1);
//		break;}

		}
	}
}
else {
	for(i=0;i<b;i++){
	if(a%(i+1)==0 && b%(i+1)==0){
//		printf("%d\n",i+1);
		e=e+1;
//		if(e==c){
//		printf("%d\n",i+1);
//		break;}
		}
}
}



int f=0;

if(a>b){
	for(i=0;i<a;i++){
	if(a%(i+1)==0 && b%(i+1)==0){
//		printf("%d\n",i+1);
		f=f+1;
		if(f==e-c+1){
		printf("%d\n",i+1);
		break;}

		}
	}
}
else {
	for(i=0;i<b;i++){
	if(a%(i+1)==0 && b%(i+1)==0){
//		printf("%d\n",i+1);
		f=f+1;
		if(f==e-c+1){
		printf("%d\n",i+1);
		break;}
		}
}
}







//		printf("%d\n",e);


    return 0;
}