You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中以二进制数表示的二进制多项式模运算实现方法咨询

如何用二进制数实现多项式取模运算?

咱们先明确一个核心区别:你用二进制数表示多项式时,多项式取模和普通整数取模的规则完全不一样——普通整数模是基于整数域的减法,而多项式模是在GF(2)(二元域)下运算,减法等价于异或(因为1-1=0,1-0=1,0-1=1,0-0=0,和异或结果一致)。这就是为什么直接用语言里的%运算符得不到你想要的结果,得按照多项式长除法的逻辑手动实现。

拿你的例子一步步拆解:

  • a = 0b10011 → 对应多项式 x⁴ + x + 1
  • b = 0b101 → 对应多项式 x² + 1

多项式取模的过程就像做长除法,只是每一步用异或代替减法:

  1. 对齐最高位:a的最高位是x⁴(对应二进制第4位,从0开始数),b的最高位是x²(第2位)。把b左移 4-2=2 位,得到 0b10100(对应 x⁴ + x²)。
  2. 异或运算:用a和左移后的b做异或:0b10011 ^ 0b10100 = 0b00111(对应 x² + x + 1)。
  3. 重复对齐与异或:现在结果的最高位是x²,和b的最高位一致,把b左移0位(还是0b101),再做异或:0b00111 ^ 0b00101 = 0b00010(对应x)。
  4. 停止条件:此时结果的最高位是x¹,比b的最高位x²低,运算结束,这个结果就是余数——也就是你要的0b10(十进制2)。

如果你需要用代码实现这个逻辑,这里给一个简单的Python示例:

def polynomial_mod(a, b):
    if b == 0:
        raise ValueError("除数不能为0")
    # 获取除数的二进制位数
    b_bit_len = b.bit_length()
    while True:
        a_bit_len = a.bit_length()
        # 当被除数的位数小于除数时,停止运算
        if a_bit_len < b_bit_len:
            break
        # 计算需要左移的位数,对齐最高位
        shift = a_bit_len - b_bit_len
        # 异或左移后的除数
        a ^= (b << shift)
    return a

# 测试你的例子
a = 0b10011
b = 0b101
print(polynomial_mod(a, b))  # 输出2,对应二进制0b10

核心要点再强调一下:

  • 多项式模运算的核心是GF(2)下的异或操作,不是普通的整数减法
  • 每次必须对齐被除数和除数的最高位,通过左移除数来匹配,再做异或
  • 普通语言中的整数取模运算符(比如Python的%)是针对整数域的,完全不适用多项式模场景

内容的提问来源于stack exchange,提问作者martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:41:36