取模运算研究

取模运算中的正负值

已知 m > 0 且为整数。

格式范围
正数 % m0 ~ m-1
正数 % -m0 ~ m-1
负数 % m-(m-1) ~ 0
负数 % -m-(m-1) ~ 0

规律:正数取余数为非负值,负数取余数为非正数(模运算时最容易忽略的一点)

int j;
for (int i = -10; i < 0; i++) {
    j = -i;
    System.out.println(j + " / 5 = " + j / 5 + " ... " + (j % 5));
    System.out.println(j + " / -5 = " + j / -5 + " ... " + (j % -5));
    System.out.println(i + " / 5 = " + i / 5 + " ... " + (i % 5));
    System.out.println(i + " / -5 = " + i / -5 + " ... " + (i % -5));
    System.out.println("--------------------------------");
}

看出来的规则

a % p % p ⋅ ⋅ ⋅ % p = a % p a\%p\%p···\%p = a\%p a%p%p%p=a%p

交换律

交换位置,结果不变。交换括号中的内容 emmmmmmmmm

( a + b ) % m = ( b + a ) % m (a + b) \% m = (b + a) \% m (a+b)%m=(b+a)%m

( a ∗ b ) % m = ( b ∗ a ) % m (a * b) \% m = (b * a) \% m (ab)%m=(ba)%m

分配律

( a + b ) % m = ( a % m + b % m ) % m (a + b ) \% m = (a\%m + b\%m) \% m (a+b)%m=(a%m+b%m)%m

为啥不是 ( a + b ) % m = a % m + b % m (a + b ) \% m = a\%m + b\%m (a+b)%m=a%m+b%m 呢?

假设此时 a >= 0, b >= 0,那么 a + b >= 0

则有 a % mb % m(a + b) % m范围都是 0 ~ m-1

a % m + b % m 相加范围是 0 ~ 2m-2

要使 ( a + b ) % m = a % m + b % m (a + b ) \% m = a\%m + b\%m (a+b)%m=a%m+b%m 成立,则 2m - 2 = m - 1,则有 m = 1 ,退化成加法运算,取模无意义

( a − b ) % m = ( a % m − b % m ) % m (a - b) \%m = (a \%m - b\%m) \%m (ab)%m=(a%mb%m)%m

( a ∗ b ) % m = ( a % m ∗ b % m ) % m (a*b)\%m = (a\%m * b\%m)\%m (ab)%m=(a%mb%m)%m

a b % m = ( a % m ) b % m a^b \% m = (a\%m)^b \% m ab%m=(a%m)b%m

结合律

( ( a + b ) % p + c ) % p = ( a + ( b + c ) % p ) % p ((a+b) \% p + c) \% p = (a + (b+c) \% p) \% p ((a+b)%p+c)%p=(a+(b+c)%p)%p

根据上边的证明:

左半边: ( ( a + b ) % p + c ) % p ((a + b) \%p + c) \%p ((a+b)%p+c)%p

= ( ( a + b ) % p + c % p ) % p = ((a + b) \%p + c \% p) \% p =((a+b)%p+c%p)%p

= ( a + b + c ) % p = (a + b + c) \% p =(a+b+c)%p

同理右半边也可以推出 ( a + b + c ) % p (a + b + c) \% p (a+b+c)%p

( ( a ∗ b ) % p ∗ c ) % p = ( a ∗ ( b ∗ c ) % p ) % p ((a * b) \% p * c) \% p = (a * (b * c) \% p) \% p ((ab)%pc)%p=(a(bc)%p)%p


参考:https://blog.csdn.net/qq_40816078/article/details/89739136

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值