模函数在 sage-math 上的实现
Implementation of modulus function on sage-math
我正在 Sage jupitar 笔记本上实现简单的 modulus 功能。函数如下:
Mod2(v,b)=(v+b*(q-1)/2)modqmod2
函数在 sage 中写成:
def modulus(v,b):
q=12289
c=[]
for i in range(len(v)):
c.append(mod(((v[i]+b[i]*(q-1)//2)%q),2))
return c
函数执行为:
dimension = 1024 # degree of polynomials
modulus = 12289
R.<X> = PolynomialRing(GF(modulus),) Gaussian field of integers
Y.<x> = R.quotient(X^(dimension) + 1) # Cyclotomic field
pi=Y.random_element()
c=Y.random_element()
xi=Y.random_element()
sj=Y.random_element()
rj=Y.random_element()
gj=Y.random_element()
kj=((pi*c+xi)*(sj*d+rj)+(2*c*gj))
# Now, We are making another list named mon and calling the modulus function
mon=[1,2,6,5,8]
modulus(kj.list(),mon)
执行上述代码时出现以下错误。
类型错误:'sage.rings.integer.Integer' 对象不可调用
这种错误几乎总是在您尝试执行 Sage 翻译为 1(3)
的操作时发生。在这种情况下,你已经重新定义了一些东西!
def modulus(v,b):
对比
modulus = 12289
你不能在 Python 中以这种方式重载东西。 Sage 将用该数字替换 modulus
所指的内容;你的功能刚刚消失了。所以当你这样做时
modulus(kj.list(),mon)
您正在尝试将 12289 作为函数调用。
我建议调用您的其他模数 modulus1
或类似名称。坚持这样做,这个问题就会消失。祝你好运。
我正在 Sage jupitar 笔记本上实现简单的 modulus 功能。函数如下:
Mod2(v,b)=(v+b*(q-1)/2)modqmod2
函数在 sage 中写成:
def modulus(v,b):
q=12289
c=[]
for i in range(len(v)):
c.append(mod(((v[i]+b[i]*(q-1)//2)%q),2))
return c
函数执行为:
dimension = 1024 # degree of polynomials
modulus = 12289
R.<X> = PolynomialRing(GF(modulus),) Gaussian field of integers
Y.<x> = R.quotient(X^(dimension) + 1) # Cyclotomic field
pi=Y.random_element()
c=Y.random_element()
xi=Y.random_element()
sj=Y.random_element()
rj=Y.random_element()
gj=Y.random_element()
kj=((pi*c+xi)*(sj*d+rj)+(2*c*gj))
# Now, We are making another list named mon and calling the modulus function
mon=[1,2,6,5,8]
modulus(kj.list(),mon)
执行上述代码时出现以下错误。
类型错误:'sage.rings.integer.Integer' 对象不可调用
这种错误几乎总是在您尝试执行 Sage 翻译为 1(3)
的操作时发生。在这种情况下,你已经重新定义了一些东西!
def modulus(v,b):
对比
modulus = 12289
你不能在 Python 中以这种方式重载东西。 Sage 将用该数字替换 modulus
所指的内容;你的功能刚刚消失了。所以当你这样做时
modulus(kj.list(),mon)
您正在尝试将 12289 作为函数调用。
我建议调用您的其他模数 modulus1
或类似名称。坚持这样做,这个问题就会消失。祝你好运。