1.RSA非对称加密
(1)选择两个素数p和q ,计算n=p*q和欧拉函数φ(n)=(p-1)(q-1),选择整数e,使gcd(φ(n), e)=1(即φ(n)和e是互素),1
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 arr[100];
arr[0] = 1;
arr[1] = input;
int step = 1;
int result = 1;
while(rate)
{
if (step == 1)
{
arr[step] = input;
}
else
{
arr[step] = arr[step - 1] * arr[step - 1];
arr[step] %= y;
}
if(rate&1)
{
result *= arr[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 >> E)
{
N = p * q;
//最小公倍数
L = leastCommonMultiple(p - 1, q - 1);
//E * D mod L = 1
int X = 1;
while((X * L + 1) % E)
{
X ++;
}
D = (X * L + 1) / E;
cout |