CINTA第二次作业


一、编程题

1、写一个模指数运算函数Mod_Exp,输入a、b和m,输出a^b mod m,即a的b次方模m

#include<iostream>
using namespace std;
int Mod_Exp(int a, int b, int m)
{
	if(b == 0)
	return 1;
	int z = Mod_Exp(a,b/2,m);
	if(b % 2 == 0)
	{
	    return z*z%m;
	}
	else
	{
		return a*z*z%m;
	}
 } 
 
 int main()
 {
 	int a,b,m;
 	cout<<"请分别输入x,y,m的值"<<endl;
 	cin>>a>>b>>m;
 	cout<<"a^b mod m = "<<Mod_Exp(a,b,m)<<endl; 
 	
 }

2、写一个求乘法逆元的函数Mul_Inverse,输入a和m,求a模m的乘法逆元。提示,要求只输出正整数

根据扩展的欧几里得算法 ax + my = gcd(a,m)= 1
x为乘法逆元,
a*x mod m = 1

#include<iostream>
using namespace std;
int egcd(int a,int b,int&x,int&y)
{
	if(b==0)
	{
		x=1;
		y=0;
		return a;
	}
	int ret = egcd(b,a%b,x,y);
	int temp = x;
	x = y;
	y = temp -a/b*y;
	return ret;
}
int Mul_lnverse(int a,int m)
{
	int x,y,gcd;
	gcd = egcd(a,m,x,y);
	if(gcd==1)
	{
		x = (x%m+m)%m;
		return x;
	}
	else{
		cout<<"a与m不互质,无乘法逆元"<<endl;
		return 0;
	}
}
int main()
{
	int a,m;
	cout<<"请输入a,m的值:"<<endl;
	cin>>a>>m;
	cout<<"a模m的乘法逆元为:"<<Mul_lnverse(a,m)<<endl;
	return 0;
}

二、计算题

1.设p=23和a=3,使用费尔马小定理计算a^2019 mod p?

在这里插入图片描述

2.请证明13整除2^70 + 3^70

在这里插入图片描述

3.使用欧拉定理计算2^100000 mod 55

在这里插入图片描述

4.手动计算7^1000的最后两个数位等于什么?

在这里插入图片描述

总结

可能有问题,请指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值