CINTA作业三

CINTA作业三

1、实现求乘法逆元的函数,给定a和m,求a模m的乘法逆元,无解时请给出无解提示,并且只返回正整数。进而给出求解同余方程(ax = b mod m)的函数,即给定a,b,m,输出满足方程的x,无解给出无解提示。

#include<iostream>
using namespace std;

int gcd(int x, int y)
{
	if (x < y)swap(x, y);
	int tem = 0;
	while (y != 0)
	{
		tem = x % y;
		x = y;
		y = tem;
	}
	return x;
}

int get_multiplicative_inverse(int a, int m)//求乘法逆元
{
	if (gcd(a, m) != 1)
	{
		cout << "无解" << endl;
		return -1;
	}
	int x = 1;
	while ((a * x) % m != 1)x++;
	return x;
}

int solve_equation(int a,int b,int m)//求同余方程,只取最小正整数解
{
    
	if (gcd(a, m) != 1)
	{
		cout << "无解" << endl;
		return -1;
	}
	int x = b * get_multiplicative_inverse(a, m) % m;
	return x;
}

int main()
{
	cout << solve_equation(3, 2, 11);
	return 0;
}

在这里插入图片描述

2、实现模指数运算的函数,给定x、y和m,求x的y次方模m。

#include<iostream>
using namespace std;

int rec_mod_exp(int x, int y, int m)
{
	if (y == 0) return 1;
	int z = rec_mod_exp(x, y / 2, m);
	if ((y % 2) == 0)return z * z % m;
	else return x * z * z % m;
}

int main()
{
	cout << rec_mod_exp(2, 16, 11);
	return 0;
}

在这里插入图片描述

3、设p = 23和a = 5,使用费尔马小定理计算a^{2020} mod p?
因 为 2020 = 91 ∗ 22 + 18 , 且 5 23 − 1 m o d 23 = 1 因为2020=91*22+18,且5^{23-1}mod23=1 2020=9122+185231mod23=1

所 以 5 2020 m o d 23 = 5 91 ∗ ( 23 − 1 ) + 18 m o d 23 = 5 18 m o d 23 = ( ( 5 16 m o d 23 ) ∗ ( 5 2 m o d 23 ) ) m o d 23 = 3 ∗ 2 m o d 23 = 6 所以5^{2020}mod23=5^{91*(23-1)+18}mod23=5^{18}mod23=((5^{16}mod23)*(5^{2}mod23))mod23=3*2mod23=6 52020mod23=591(231)+18mod23=518mod23=((516mod23)(52mod23))mod23=32mod23=6

4、使用欧拉定理计算2^{100000} mod 55
由 g c d 算 法 求 满 足 g c d ( i , 55 ) = 1 且 小 于 55 的 i 的 个 数 , 可 得 ϕ ( 55 ) = 40 由gcd算法求满足gcd(i,55)=1 且小于55的i的个数,可得\phi(55)=40 gcdgcd(i,55)=155iϕ(55)=40

由 欧 拉 定 理 得 2 ϕ ( 55 ) ≡ 1 ( m o d 55 ) 即 2 40 ≡ 1 ( m o d 55 ) 由欧拉定理得2^{\phi(55)}\equiv1(mod55)即2^{40}\equiv1(mod55) 2ϕ(55)1(mod55)2401(mod55)

所 以 2 100000 m o d 55 = 2 40 ∗ 2500 m o d 55 = 1 所以2^{100000} mod 55=2^{40*2500}mod55=1 2100000mod55=2402500mod55=1

5、手动计算7^{1000}的最后两个数位等于什么?
由 题 意 可 得 求 7 1000 m o d 100 由题意可得求7^{1000}mod100 71000mod100

由 g c d 算 法 求 满 足 g c d ( i , 100 ) = 1 且 小 于 100 的 i 的 个 数 , 可 得 ϕ ( 100 ) = 40 由gcd算法求满足gcd(i,100)=1 且小于100的i的个数,可得\phi(100)=40 gcdgcd(i,100)=1100iϕ(100)=40

由 欧 拉 定 理 得 7 ϕ ( 100 ) ≡ 1 ( m o d 100 ) 即 7 40 ≡ 1 ( m o d 55 ) 由欧拉定理得7^{\phi(100)}\equiv1(mod100)即7^{40}\equiv1(mod55) 7ϕ(100)1(mod100)7401(mod55)

所 以 7 1000 m o d 100 = 7 40 ∗ 25 m o d 100 = 1 所以7^{1000} mod 100=7^{40*25}mod100=1 71000mod100=74025mod100=1

所以最后两位数是01

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值