version 1.1, 2003/11/03 03:11:21 |
version 1.4, 2008/09/19 10:55:40 |
|
|
/* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/ox_ntl/ntl.rr,v 1.3 2003/11/25 13:48:50 iwane Exp $ */ |
|
|
module ntl; |
module ntl; |
localf factor$ |
localf factor$ |
|
localf lll$ |
localf ex_data$ |
localf ex_data$ |
localf ex_data_tmp$ |
localf ex_data_tmp$ |
|
localf mat2list$ |
|
localf list2mat$ |
|
|
|
|
/* static variables */ |
/* static variables */ |
Line 11 localf ex_data_tmp$ |
|
Line 14 localf ex_data_tmp$ |
|
/* extern variables */ |
/* extern variables */ |
|
|
#if 1 |
#if 1 |
localf test$ |
localf test_factor$ |
|
localf test_lll$ |
|
|
/*&usage begin: ntl.test(PID, POLY) |
/*&usage begin: ntl.test_factor(PID, POLY) |
compare on ox_NTL and on asir. |
compare on ox_NTL and on asir. |
|
|
example: |
example: |
|
[1027] PID=ox_launch(ox_ntl); |
[1028] F=ntl.ex_data(4); |
[1028] F=ntl.ex_data(4); |
x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-7453176*x^6+13950764*x^4-5596840*x^2+46225 |
x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-7453176*x^6+13950764*x^4-5596840*x^2+46225 |
[1029] F = F * subst(F, x, x + 1)$ |
[1029] F = F * subst(F, x, x + 1)$ |
Line 25 x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-745317 |
|
Line 30 x^16-136*x^14+6476*x^12-141912*x^10+1513334*x^8-745317 |
|
[1031] ntl.test(PID, F); |
[1031] ntl.test(PID, F); |
[CPU,0.121539,0.001354,GC,0.0222,0] |
[CPU,0.121539,0.001354,GC,0.0222,0] |
|
|
|
|
end: */ |
end: */ |
def test(PID, F) |
def test_factor(PID, F) |
{ |
{ |
T0 = time(); |
T0 = time(); |
fctr(F); |
fctr(F); |
|
|
return (["CPU", T1[0]-T0[0],T2[0]-T1[0],"GC",T1[1]-T0[1],T2[1]-T1[1]]); |
return (["CPU", T1[0]-T0[0],T2[0]-T1[0],"GC",T1[1]-T0[1],T2[1]-T1[1]]); |
} |
} |
|
|
|
def test_lll(PID, F) |
|
{ |
|
T0 = time(); |
|
pari(lllint, F); |
|
T1 = time(); |
|
ntl.lll(PID, F); |
|
T2 = time(); |
|
|
|
return (["CPU", T1[0]-T0[0],T2[0]-T1[0],"GC",T1[1]-T0[1],T2[1]-T1[1]]); |
|
} |
|
|
#endif |
#endif |
|
|
/*&usage begin: ntl.factor(PID, POLY) |
/*&usage begin: ntl.factor(PID, POLY) |
Line 104 def factor(PID, POLY) |
|
Line 119 def factor(PID, POLY) |
|
|
|
/* ERROR Check */ |
/* ERROR Check */ |
if (type(RET_NTL) != 4 || length(RET_NTL) < 2) { |
if (type(RET_NTL) != 4 || length(RET_NTL) < 2) { |
error(RET_NTL); |
return (RET_NTL); |
} |
} |
|
|
RET = cons([RET_NTL[0] * C, 1], RET_NTL[1]); |
RET = cons([RET_NTL[0] * C, 1], RET_NTL[1]); |
|
|
} |
} |
|
|
return (ex_data_tmp(t^2-p, N)); |
return (ex_data_tmp(t^2-p, N)); |
|
} |
|
|
|
|
|
def mat2list(M) |
|
{ |
|
A = size(M); |
|
|
|
ROW=A[0]; |
|
COL=A[1]; |
|
|
|
for (I = 0; I < ROW; I++) { |
|
for (J = 0; J < COL; J++) { |
|
A = append(A, [M[I][J]]); |
|
} |
|
} |
|
|
|
return (A); |
|
} |
|
|
|
def list2mat(L) |
|
{ |
|
if (type(L) != 4) { |
|
return ("Invalid Argument"); |
|
} |
|
|
|
ROW = L[0]; |
|
if (type(ROW) == 10) |
|
ROW = int32ton(ROW); |
|
COL = L[1]; |
|
if (type(COL) == 10) |
|
COL = int32ton(COL); |
|
|
|
A = newmat(ROW, COL); |
|
|
|
C = 2; |
|
for (I = 0; I < ROW; I++) { |
|
for (J = 0; J < COL; J++) { |
|
A[I][J] = L[C]; |
|
C++; |
|
} |
|
} |
|
|
|
|
|
return (A); |
|
} |
|
|
|
|
|
|
|
/*&usage begin: ntl.lll(PID, MAT) |
|
the basics of LLL reducation. |
|
|
|
{M} |
|
Matrix which element is Integer. |
|
|
|
example: |
|
[1046] def trans(M) { |
|
RET = newmat(size(M)[1], size(M)[0]); |
|
for (I = 0; I < size(M)[0]; I++) |
|
for (J = 0; J < size(M)[1]; J++) |
|
RET[J][I] = M[I][J]; |
|
return (RET); |
|
} |
|
[1047] def lllpari(A) { |
|
return (trans(trans(A) * pari(lllint, trans(A)))); |
|
} |
|
[1048] M=newmat(3, 3, [[10,0, 10], [-7,3, 30], [7, 3, 20]]); |
|
[ 10 0 10 ] |
|
[ -7 3 30 ] |
|
[ 7 3 20 ] |
|
[1049] ntl.lll(PID, M); |
|
[ 2 -6 0 ] |
|
[ -1 -3 10 ] |
|
[ 11 3 0 ] |
|
[1050] lllpari(M); |
|
[ 2 -6 0 ] |
|
[ -1 -3 10 ] |
|
[ 11 3 0 ] |
|
|
|
|
|
ref: |
|
pari(lll) |
|
|
|
end: */ |
|
def lll(PID, M) |
|
{ |
|
/* parameter check */ |
|
TYPE = type(M); |
|
if (TYPE != 6) { /* matrix */ |
|
MES = "ntl.lll: invalid argument: " + TYPE; |
|
error(MES); |
|
} |
|
|
|
A = mat2list(M); |
|
|
|
ox_cmo_rpc(PID, "lll", A); |
|
|
|
RET_NTL = ox_pop_cmo(PID); |
|
|
|
/* return value check */ |
|
if (type(RET_NTL) != 4) { /* list */ |
|
error("ntl.lll: error"); |
|
} |
|
|
|
R = list2mat(RET_NTL); |
|
|
|
return (R); |
} |
} |
|
|
|
|