1、实现求乘法逆元的函数,给定a和m,求a模m的乘法逆元,无解时请给出无解提示,并且只返回正整数。进而给出求解同余方程(ax = b mod m)的函数,即给定a,b,m,输出满足方程的x,无解给出无解提示。
求乘法逆元的函数:
int Multiplicative_Inverse(int a, int m)
{
int k=-1;
for (int i = 0; i < m; i++)
{
if (a * i % m == 1)
{
k = i;
break;
}
}
return k;
}
求解同余方程的函数:
int Solve_congruence(int a, int b,int m)
{
int k = Multiplicative_Inverse(a, m);
if (k!=-1)
{
k = k * b;
}
return k;
}
2、实现模指数运算的函数,给定x、y和m,求x的y次方模m。
int Modulus_Index(int x,int y,int m)
{
int res = 1;
while (y>0)
{
if ((y & 1) == 1)
{
res = (res * x) % m;
}
y = y / 2;
x = (x * x) % m;
}
return res;
}
3、设p = 23和a = 5,使用费尔马小定理计算a^{2020} mod p?
解:
因为5^2020 ≡ 5^(91 * 22 + 18) (mod 23)
且91 * 22 = 91 *(23 - 1),
所以5^(91 * 22 + 18) ≡ 5^18 (mod 23) = 6
4、使用欧拉定理计算2^{100000} mod 55。
解:
因为ϕ(55) = 40,
由欧拉定理得
2^ϕ(55) ≡ 1(mod 55)
所以,2^100000 mod 55 = 2^( 40 * 2500 ) mod 55 = 1
5、手动计算7^{1000}的最后两个数位等于什么?
解:
要求7^1000的最后两个位数,只要求 7^1000 mod 100,
因为ϕ(100) = 40,
由欧拉定理得
7^ϕ(55) = 1 (mod 100)
所以,7^1000 mod 100 = 7^40*25 mod 100 = 1
可得最后两位数为0 1