【发布时间】:2013-06-27 16:18:00
【问题描述】:
此函数返回列表 g 中的异常值。它应该返回 32774、65548、1048768,但它的值更像是把整个二进制文件当作一个大紧身裤,只是将 LSB 移向 MSB,而不是实际移动。
函数如下:
def multiply(a,b): #a,b are values like 1101010001....
a = min(a,b); b = max(a,b)
g = []; bitsa = "{0:b}".format(a) #returns product of 2 polynomials in gf2
[g.append((b<<i)*int(bit)) for i,bit in enumerate(bitsa)]
return reduce(lambda x,y: x+y,g)
这是我正在测试的:
x = int(str(100000000000011),2)
y = int(str(1000110),2)
x1 = int(str(111),2)
y1 = int(str(11),2)
x2 = int(str(0001),2)
y2 = int(str(1111),2)
print "multiply: ",multiply(x,y)
print "multiply: ",multiply(x1,y1)
print "multiply: ",multiply(x2,y2)
目前只有 x1,y1 有效,其他无效。 这是最后一个输入的整个方程:
100000000000011
1000110
---------------------
100000000000011
100000000000011
100000000000011
---------------------
100011000000011001010
如您所见,要获得产品,两个二进制文件都需要检查其索引是否为 1,然后根据该值进行附加。我不确定如何适应该部分,以及如何做到这一点,以便它返回正确的值。试图理解为什么 x1,y1 有效而其他无效。
编辑:
我只想明确一点,J0HN 的答案似乎完全准确,而且他在所引用的在线工具中发现了一个错误。从现在看来,以这种方式处理有限域数学时,内置的优先。遇到这种情况的任何人都绝对应该考虑向他展示对那些敏锐的观察技能以支付账单的投票喜爱。
【问题讨论】:
标签: python python-2.7 polynomial-math finite-field