#include <stdio.h>
#define TEST(x, y) printf("%d, %d => %d\n", (x), (y), common_root((x),(y)))
int common_root(int a, int b)
{
int temp;
if (a == 1 || b == 1)
return -1;
if (a == b) {
return a;
}
if (a > b) {
// Swap to make sure a < b
temp = a;
a = b;
b = temp;
}
if ((b % a) == 0) // Check if `b` divisible by `a`
return common_root(a, b/a);
else
return -1;
}
int main(void) {
TEST(1,2);
TEST(2,3);
TEST(6,10);
TEST(4, 16);
TEST(12, 24);
TEST(27, 81);
TEST(36, 1296);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFRFU1QoeCwgeSkgcHJpbnRmKCIlZCwgJWQgPT4gJWRcbiIsICh4KSwgKHkpLCBjb21tb25fcm9vdCgoeCksKHkpKSkKCmludCBjb21tb25fcm9vdChpbnQgYSwgaW50IGIpCnsKCWludCB0ZW1wOwoJCglpZiAoYSA9PSAxIHx8IGIgPT0gMSkKCQlyZXR1cm4gLTE7CglpZiAoYSA9PSBiKSB7CgkJcmV0dXJuIGE7Cgl9CgkKCWlmIChhID4gYikgewoJCS8vIFN3YXAgdG8gbWFrZSBzdXJlICBhIDwgYgoJCXRlbXAgPSBhOwoJCWEgPSBiOwoJCWIgPSB0ZW1wOwoJfSAKCQoJaWYgKChiICUgYSkgPT0gMCkgLy8gQ2hlY2sgaWYgYGJgIGRpdmlzaWJsZSBieSBgYWAKCQlyZXR1cm4gY29tbW9uX3Jvb3QoYSwgYi9hKTsKCWVsc2UKCSAgICByZXR1cm4gLTE7Cn0KCmludCBtYWluKHZvaWQpIHsKCVRFU1QoMSwyKTsKCVRFU1QoMiwzKTsKCVRFU1QoNiwxMCk7CglURVNUKDQsIDE2KTsKCVRFU1QoMTIsIDI0KTsKCVRFU1QoMjcsIDgxKTsKCVRFU1QoMzYsIDEyOTYpOwoJcmV0dXJuIDA7Cn0K