实验4 求解乘法逆元
实验目的
熟悉求解乘法逆元的算法。在此基础上,选择一种算法,通过运用高级程序设计语言,设计并实现一个计算乘法逆元的运算器
实验原理
【定义】对于整数a,m,如果存在整数b,满足ab mod m =1,则称b为a模m的乘法逆元,记为a^(-1)。
【定理】a存在模m的乘法逆元的充要条件是a和m的最大公约数为1,记为gcd(a,m)=1。
实验步骤
输入:一个整数a和m,其中m是模数
输出:返回a模m的乘法逆元
①u=1,g=a,v1=0,v3=m
②计算q=g/v3,t3=g%v3
③如果t3 不等于0,则计算t1=(u-q * v1) mod m,u=v1,g=v3,v1=t1,v3=t3
④如果t3不等于0,则转到②;否则g=v3
⑤如果g 不等于1,则返回a的逆不存在;如果g=1,则当v1>0时返回v1;当v1<0时,返回m+v1
代码(matlab)
u=1;
a=input('输入a的值:'); %%输入a
g=a;
v1=0;
m=input('输入m的值:');%%输入m
v3=m;
if a==0 || m==0 %%如果a || m至少有一个为0
disp('不存在乘法逆元');
else
while true %%如果a || m 都不为0
q=floor (g/v3);
t3=mod(g,v3);
if t3 ~=0 %%如果t3不等于0
t1= mod(u-(q*v1),m);
u=v1;
g=v3;
v1=t1;
v3=t3;
else
g=v3; %%如果t3==0
break;%%终止循环
end %%结束if语句
end
%%结束循环
if g ~=1
disp('不存在乘法逆元');
elseif v1>0
disp('乘法逆元a逆为');disp(v1);
else
v1=v1+m;
disp('乘法逆元a逆为:');
disp(v1);
end
end
效果展示:
分享就到这里啦,大家有问题可以提出来一起讨论哦,虽然小编也不怎么会,但大家可以一起学习一下哈