给定一个函数,选择n,输出它的LUT(查找表Look-Up-Table)
def computation_over_finite_fields(n):
"""
给定一个有限域GF(2^n),遍历域中的每个元素,计算函数的输出结果。
:param n: 2的n次方上的有限域
:return:x=GF([0,1,...,2^n-1]),y=f(x)的结果,这里的函数y可以改变。返回的值仍是一个列表,这个列表里是有限域里的元素,它们之间的加法和乘法仍然是有限域里的加法和乘法
"""
import galois
GF = galois.GF(2**n)#创建有限域
x = GF(list(range(2**n)))#用列表生成有限域上的元素GF([0,1,2,...,2**n-1])
g = GF.primitive_element#生成本原元
# 输入自己的函数,例子中的y=x^3+(g^2)*x^2+1.注意如果有常数要用:GF(常数)
y = x **3 + (g** 2)* x** 2 + x + GF(1)
return y
#选择n,这里n选的是4
example_y = computation_over_finite_fields(4)
list_y = [int(i) for i in example_y]#用十进制列表输出
print(list_y)
output:
[1, 5, 8, 10, 5, 6, 9, 12, 6, 6, 2, 4, 12, 11, 13, 12]