#include <iostream>
#include <math.h>
using namespace std;
int leastCommonMultiple(int a, int b);
int maxCommonDivisor(int a, int b);
// 最大公约数
int maxCommonDivisor(int a, int b) {
int temp = a;
if (a < b)
{
a = b;
b = temp;
}
while(a % b) {
temp = b;
b = a % b;
a = temp;
}
return b;
}
// 最小公倍数
int leastCommonMultiple(int a, int b) {
int macDivisor = maxCommonDivisor(a, b);
return a / macDivisor * b;
}
// 计算 input ^ rate mod y
int multiMod(int input, int rate, int y) {
int start = 1;
int array[100];
array[0] = 1;
array[1] = input;
int step = 1;
int result = 1;
while(rate) {
if (step == 1)
{
array[step] = input;
} else {
array[step] = array[step - 1] * array[step - 1];
array[step] %= y;
}
if(rate&1) {
result *= array[step];
result %= y;
}
step ++;
rate = rate >> 1;
}
return result;
}
int main() {
int input;
int p, q;
int N, L, E, D;
while(cin >> p >> q >> input) {
// cout<<multiMod(p, q, 10)<<endl;
N = p * q;
//最小公倍数
L = leastCommonMultiple(p - 1, q - 1);
for (int i = 2; i < L; ++i)
{
//找到一个不为1且跟L最大公约数为1
if (maxCommonDivisor(L, i) == 1)
{
E = i;
cout<< 2<<endl;
break;
}
}
//E * D mod L = 1
// means L * X - 1 = E * D, X is unknow positive integer
int X = 1;
while((X * L + 1) % E) {
X ++;
}
D = (X * L + 1) / E;
cout<<"N = " << N << " L = " << L << " E = " << E << " D = " << D << " X = " << X <<endl;
// 加密过程
int code = multiMod(input, E, N);
// 解密过程
int deCode = multiMod(code, D, N);
cout<< "code = " << code << " deCode = " << deCode << endl;
}
}
//算法实现思路参考博客
// https://www.cnblogs.com/coolYuan/p/9168284.html