CINTA作业3

这篇博客介绍了如何利用模指数运算和欧拉定理来求解乘法逆元。通过实例展示了计算32019mod23和2100000mod55的过程,以及手动确定71000的最后两位数的方法,揭示了模运算中的一些规律和技巧。
摘要由CSDN通过智能技术生成
  • 求解乘法逆元
def egcd(a, b, f1, f2):
    while b != 0:
    	f1, f2= f2, f1 - a // b * f2
    	a, b = b, a%b
    return f1, a

def get_mutiply_reverse(a, b):
    r1, gcf = egcd(n1, n2, 1, 0)
    if gcf != 1:
        return -1
    else:
        return r1 % b


n1, n2 = map(int, input().split(" "))

reverse = get_mutiply_reverse(n1, n2)
if reverse != -1:
	print("{}在{}下的逆元为{}".format(n1, n2, reverse))
else:
    print("{}在{}条件下不存在逆元".format(n1, n2))

  • 模指数运算,这个题好像书里有代码了,这
def rec_mod_exp(x, y, p):
    if y == 0:
        return 1
    z = rec_mod_exp(x, y // 2, p)
    if (y & 1) == 0:  # y is an even number
        return z * z % p
    else:              # y is an odd number
        return x * z * z % p


a = eval(input())
b = eval(input())
m = eval(input())
print(rec_mod_exp(a, b, m))

  • 利用费马小定理计算
def get_mod(a, m, p):
    i = 0
    while True:
        r = (m - i) % (p - 1)
        if r == 0:
            result = a ** i
            result = result % p
            return result
        else:
            i = i + 1


base = eval(input()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值