1、实现求乘法逆元的函数,给定a和m,求a模m的乘法逆元,无解时请给出无解提示,并且只返回正整数。进而给出求解同余方程(ax = b mod m)的函数,即给定a,b,m,输出满足方程的x,无解给出无解提示。
2、实现模指数运算的函数,给定x、y和m,求x的y次方模m。
3、设p = 23和a = 5,使用费尔马小定理计算a^{2020} mod p?
4、使用欧拉定理计算2^{100000} mod 55。
5、手动计算7^{1000}的最后两个数位等于什么?
1、
#include <iostream>
using namespace std;
int fun(int a, int m)
{
//判无解,是否互素
int x = a; int y = m;
if (a > m)
{
x = m; y = a;//x比y小
}
for (int i = 2; i <= x; i++)
{
if (y % i == 0)
{
cout << "无解";
return 0;
}
}
//有解
int k;
for (int i = 2;; i++)
{
if (i* a %m==1)
{
k = i;
return k;
}
}
}
int f(int a, int b, int m)
{
int x;
int n = fun(a,m);
x = a * b;
return x;
}
2.
int fun(int x, int y,int m)
{
if (y < m)
{
for (int i = 1; i < y; i++)
{
x = x * x;
}
return x % m;
}
else
{
for (int i = 1; i < y%(m-1); i++)
{
x = x * x;
}
return x % m;
}
}
3.
5^(2020) = 5^(22*91+18) = 5^(18) = 6 (mod 23)
4.因为ϕ(55)=40
欧拉定理为:a ϕ ( n ) ≡ 1( mod n ),所以有 2 ϕ (55) ≡ 1(mod55),即2^(40)≡ 1(mod55)
有2 ^ (100000) ≡ 2^ (40*2500) ≡ 1 (mod55)
5.
该题转化为求7^(1000) mod 100的值。
因为 ϕ(100)=40
所以7 ^ (40) ≡ 1 (mod100)
而 7^(1000)=7^(40*25)
即 7^(1000) ≡ 1 (mod100)
最后两个位数为 01