java求同余_[转]同余即相关性质

一、同余

我们来了解一下什么是“同余”。简单来说就是,如果两个数都除以某个数能够有相同的余数,那么我们就说这两个数“同余”。不过这次我们用严谨的数学概念来表述:

两个整数 a,b,若它们除以整数 m所得的余数相等,则称 a,b对于模 m同余

记作

33363fa599b6fb6fca3c2841f4d80d4d.png

读作 a同余于 b模 m,或读作 a与 b关于模 m同余。

比如

5494fb15a38f153128de2118cadb91c6.png

我们再来了解一下相关的性质:

如果

33363fa599b6fb6fca3c2841f4d80d4d.png,那么 m | (a − b) ,这里 m | (a − b) 表示 (a − b) 能被 m整除

如果

33363fa599b6fb6fca3c2841f4d80d4d.png

ba2720d5fc5c9bb4567e2e6913492b68.png, 那么

2f0d097b2e767807d2193336515f1325.png

如果

33363fa599b6fb6fca3c2841f4d80d4d.png

64c7bdf8217a6727c16fc635e2108d4a.png, 那么

26e8c34a9b1bb4fe33599a37dc70b161.png

1a13175235498db346afe3cda4238cf0.png

e1737e8380bccec3e673c708c685ee38.png

1d75698c553e4eed6093cf1f17a59adf.png

如果

33363fa599b6fb6fca3c2841f4d80d4d.png, 那么

34c5b7c7581c29ce21e7ca9145bb93a2.png

有了这些性质,判断两个数是否同余就可以用更简单的方法了。根据性质一,原来我们需要判断 (a mod m) == (b mod m)

是否为真,现在就可以直接判断 (a - b) mod m == 0

是否为真了。这样就把其中一次求余运算变为减法运算了。一般来说减法要比除法更容易在计算机上实现,运算速度也更快。

二、求余 (a * b * c * d) mod m = ?

由于计算机表示一个整数通常用 32bit 。而大量连乘运算则可能会导致整数溢出,这时我们就要利用求余一些性质来进行处理了。把以上式子转换为:

已知: (a * b) mod m == ((a mod m) * b) mod m

所以: (a * b * c * d) mod m = ((((((a mod m) * b) mod m) * c) mod m) * d) mod m

这样就把连乘运算分解了,每次可以先进行求余运算然后再进行乘法运算。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值