求解x=a^b(mod m)

本文介绍了如何求解大数幂次模运算问题x≡ab(mod m),当b非常大时,通过素数探路思想、费马小定理、欧拉公式以及循环起始点和循环长度的概念,逐步解决a与m互素和不互素两种情况下的解法。最后探讨了如何求解复合数a的幂次模m的循环信息,并给出了完整的解决方案。
摘要由CSDN通过智能技术生成

本文致力于解决如下问题:求解x≡ab(mod m),其中a,b,m都是正整数。

如果b足够小,则可直接用逐次平方法求解,如果你不知道逐次平方法,可以先看这里。所以这里假设b足够大(这不是说是一个64位整数,而是可以上百上千位的一个数),大到逐次平方法也已不足以快速出解。

用素数探路的思想,先假设m是素数,那么要么 a 与 m 互素,要么 m|a。前者可利用费马小定理,令 b = k(m-1) + b′,其中 0<=b′< m-1,则有 ab≡ak(m-1)+b′≡ab′(mod m)。之后可用逐次平方法快速求解。若m|a,结果显然为0。

现在考虑要求 m 可以是任意数的情况。同样,若 a 与 m 互素,由上边我们可联想到欧拉公式,利用欧拉公式求解。令 b = kΦ(m) + b′,其中 0≤b′<Φ(m),则有 ab≡akΦ(m)+b′≡ab′(mod m),之后用逐次平方法快速求解。如果 a与 m不互素,即 gcd(a,m) > 1,这种情况下应该怎么做?

注意到 b 如此大,而模 m 的不同的数最多只有m个,显而易见的,ab一定和某个很小的指数ab′模m同余,如果找到这个小的指数,就可以利用逐次平方法求解。考虑如下序列:

a0, a1, …, am(mod m)

由鸽巢原理可知,必有一个最小的r和一个最小的s,使得ar≡ar+s(mod m),其中r+s≤m。若找到这样的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来帮你求解这个方程组。首先,我们可以将20和13分别分解为它们的逆元和模数26的乘积。由于20 * 21 = 420 ≡ 1 (mod 26),所以20的逆元是21,而由于13 * 11 = 143 ≡ 1 (mod 26),所以13的逆元是11。 将这些值代入方程,得到: 18 = (20ab) mod 26 19 = (13ab) mod 26 将20的逆元代入第一个方程: 18 = (1ab) mod 26 因此, ab ≡ 18 (mod 26) 将13的逆元代入第二个方程: 19 = (1ab) mod 26 因此, ab ≡ 19 (mod 26) 现在我们可以使用中国剩余定理来解决这个方程组。首先,我们需要找到26的二次剩余,我们可以通过手动计算得到: 1^2 ≡ 1 (mod 26) 3^2 ≡ 9 (mod 26) 5^2 ≡ 25 ≡ -1 (mod 26) 7^2 ≡ 49 ≡ -1 (mod 26) 9^2 ≡ 81 ≡ 3 (mod 26) 11^2 ≡ 121 ≡ 15 (mod 26) 15^2 ≡ 225 ≡ 1 (mod 26) 17^2 ≡ 289 ≡ 13 (mod 26) 19^2 ≡ 361 ≡ 11 (mod 26) 21^2 ≡ 441 ≡ 13 (mod 26) 23^2 ≡ 529 ≡ 25 ≡ -1 (mod 26) 25^2 ≡ 625 ≡ 23 (mod 26) 由此可知,26的二次剩余为1、3、9、11、15、17、19和25。现在,我们可以将方程组转化为以下形式: ab = 18 + 26k ab = 19 + 26m 其中,k和m分别是未知数。为了解决这个方程组,我们需要找到一个数x,它除以26的余数分别为k和m,且对于所有的二次剩余i,x mod i的余数等于它在i上的余数。 可以使用如下公式计算这个数: x = (18 * 25 * 13 - 19 * 21 * 20) mod (25 * 21) 注意,25和21都是26的二次剩余,因此它们的乘积也是26的二次剩余。计算结果为: x = 4557 mod 525 = 432 因此,k = x mod 26 = 10,m = x mod 19 = 5。因为ab ≡ 18 (mod 26)和ab ≡ 19 (mod 26)等价于ab ≡ 10 (mod 26)和ab ≡ 5 (mod 19),所以我们可以得到ab ≡ 90 (mod 494)。现在,我们需要找到一个数y,它除以494的余数等于ab,且对于所有的二次剩余i,y mod i的余数等于它在i上的余数。 可以使用如下公式计算这个数: y = (90 * 25 * 18 - 1 * 21 * 19) mod (25 * 21 * 19) 注意,25、21和19都是26的二次剩余,因此它们的乘积也是26的二次剩余。计算结果为: y = 76995 mod 9975 = 2190 因此,ab = 2190,即: a = ab^{-1} mod 26 = 5 b = ab^{-1} mod 26 = 14 因此,这个方程组的解为a = 5,b = 14。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值