M =[] S = ge = Matrix(ZZ,len(M)+1) for i inrange(len(M)): ge[i,i] = 2 ge[i,-1] = M[i] ge[-1,i] = 1 ge[-1,-1] = S Ge = ge.LLL()[0] print(Ge) m = "" for i in Ge[:-1]: m += str(((i+1)//2^^1)) print(m) print(int(m,2))
CJLOSS算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#sage defCJLOSS(A, s): n = len(A) N = ceil(sqrt(n)) L = matrix(QQ, n + 1) for i inrange(n): L[i, i] = 1 L[n, i] = 1/2 L[i, n] = N * A[i] L[n, n] = N * s res = L.LLL() for v in res: ifall(x in [-1/2, 1/2] for x in v[:-1]): out = [1/2 - a for a in v[:-1]] return out