关于MOD运算

四个公式:

(a + b) mod k = (a mod k + b mod k) mod k

(a - b) mod k = (a mod k - b mod k + k) mod k

(a * b) mod k = ((a mod k ) * (b mod k)) mod k

(a / b) mod k 需要用到乘法逆元

如果满足 (b * b1 ) mod k = 1,则称最小的正整数解b1为b mod k 的乘法逆元。那么(a/b)mod k = (a * b1) mod k。其中b1通过扩展欧几里得求。

### 关于 Mod 运算的使用方法 Mod 运算通常表示取模操作,其结果是两数相除后的余数。以下是关于 mod 运算的一些常见用法及其注意事项: #### 1. **基本性质** - 取模的结果总是小于被模数 \(p\) 的值[^3]。 - 如果计算 \((a \% p)\),那么结果一定满足 \(0 \leq (a \% p) < p\)。 #### 2. **代数性质** - **结合律**: - 加法形式: \(((a + b) \% p + c) \% p = (a + (b + c) \% p) \% p\)[^1]。 - 乘法形式: \(((a * b) \% p * c) \% p = (a * (b * c) \% p) \% p\)[^1]。 - **交换律**: - 对加法: \((a + b) \% p = (b + a) \% p\)[^1]。 - 对乘法: \((a * b) \% p = (b * a) \% p\)。 - **分配律**: - 对加法和乘法混合的情况: \(((a + b) \% p * c) \% p = ((a * c) \% p + (b * c) \% p) \% p\)[^1]。 #### 3. **实际应用中的例子** ##### (1)奇偶判断 通过简单的模运算即可快速判断一个整数的奇偶性: ```python if number % 2 == 0: print("Even") # 偶数 else: print("Odd") # 奇数 ``` ##### (2)循环数组索引 当需要在一个固定大小的数组中实现循环访问时,可以通过取模来简化逻辑: ```c int array_size = 5; for (int i = 0; i < 10; ++i) { int index = i % array_size; printf("%d ", index); } // 输出: 0 1 2 3 4 0 1 2 3 4 ``` ##### (3)防止溢出 在处理大数值乘法时,为了避免中间结果超出数据类型的范围,可以在每一步都进行取模操作以减少数值规模: ```cpp long long multiply_mod(long long a, long long b, long long m) { return ((a % m) * (b % m)) % m; } ``` #### 4. **错误解决案例** 如果遇到如下情况可能导致错误: - 输入负数时未考虑取模行为差异(某些编程语言可能返回负余数),应标准化为正数: ```python def positive_mod(a, p): result = a % p return result if result >= 0 else result + p print(positive_mod(-7, 5)) # 正确输出应该是 3 而非 -2 ``` - 大数运算导致溢出问题可通过分步取模的方式缓解,具体见前述 `multiply_mod` 函数示例[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值