1、实现求乘法逆元的函数,给定a和m,求a模m的乘法逆元,无解时请给出无解提示,并且只返回正整数。
using namespace std;
int han1(int a, int b)
{
int r1 = 1, r2 = 0, s1 = 0, s2 = 1;
while (b)
{
int mod = a % b;
int n = a / b;
a = b;
b = mod;
int _r1 = r1;
int _s1 = s1;
r1 = r2;
s1 = s2;
r2 = _r1 - r1 * n;
s2 = _s1 - s1 * n;
}
if (r1 >= b)
{
cout << "无解" << endl;
return -1;
}
}
进而给出求解同余方程(ax = b mod m)的函数,即给定a,b,m,输出满足方程的x,无解给出无解提示。
int han2(int a, int b, int m)
{
int x = 1;
if (han1(a, m) == -1)
{
cout << "无解" << endl;
return -1;
}
else
{
x = b * han1(a, m);
return x;
}
}
2、实现模指数运算的函数,给定x、y和m,求x的y次方模m。
int han(int x, int y, int m)
{
int n = 1;
while (y > 0)
{
if ((y & 1) == 1)
n = (n * x) % m;
y = y / 2;
x = (x * x) % m;
}
return n;
}
3、设p = 23和a = 5,使用费尔马小定理计算a^{2020} mod p
4、使用欧拉定理计算2^{100000} mod 55
解:ϕ(55)=40,2^100000 mod 55= 2^(40∗2500) mod 55=1
5、手动计算7^{1000}的最后两个数位等于什么