Я реализую простую функцию модуля на ноутбуке Sage Jupitar. Функция выглядит следующим образом:
Mod 2 (v, b) = (v + b * (q-1) / 2) mod q mod 2
Функция написана в мудреце как:
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)
Я получаю следующую ошибку при выполнении кода выше.
TypeError: объект 'sage.rings.integer.Integer' не может быть вызван