【问题标题】:Quadratic Sieve algorithm implementation二次筛算法实现
【发布时间】:2013-11-05 04:00:51
【问题描述】:

我在 Maple 中有以下二次筛算法的代码:

  QS := proc(n::posint, (c := 1.2, cutoff := 7))
local st, nfb, svprimes, svplogs, nsvprimes, M, sievearray, polroots,
      kn, b, fb, rels, A, deps;
st := Initialization(n,c,cutoff);
print('Using multiplier : ');
print(st[1]);
print('Using smoothness bound: ');
print(st[3]);
fb := st[6];
print('Size of factor base: ');
print(ArrayNumElems(st[6]));
svprimes := st[7];
svplogs := st[8];
nsvprimes := st[9];
M := st[5];
sievearray := st[11];
polroots := st[10];
print('Sieving interval of length : ');
print(2*M+1);
sieve(svprimes, svplogs, nsvprimes, M, sievearray, polroots);
print('Sieving done, searching for smooth values.. ');
kn := st[2];
b := st[4];
rels := FindRelations[kn, b, M, fb, sievearray];
print(LinearAlgebra:-RowDimension(A));
gc();
print('Solving a matrix of size ');
print(LinearAlgebra:-Dimension(A));
deps := Dependencies(A);
print('Number of linear dependien fopund: ');
print(nops(deps));
print('Factors: ');
FindFactors(n, rels, deps)
and proc:

它给出以下错误:错误,“(”意外。有人可以帮我解决这个问题吗?另外我想知道是否可以将此代码转换为 Java 或 C 代码?我不是要求任何人这样做,而是想知道这是否可能。我会自己试一试,但如果有人愿意,欢迎您。这是一个二次筛算法,我试图用它来分解超过一百位数的长数。

【问题讨论】:

  • 那里看起来像伪代码。是的,您可以将其翻译成任何(图灵完备的)语言。
  • 不,它是 Maple 中的代码。碰到铰链,但不知道如何修理。

标签: java encryption cryptography rsa maple


【解决方案1】:

改变,

QS := proc(n::posint, (c := 1.2, cutoff := 7))

到,

QS := proc(n::posint, c := 1.2, cutoff := 7)

如果您打算将以下内容作为函数调用,请更改,

FindRelations[kn, b, M, fb, sievearray];

到,

FindRelations(kn, b, M, fb, sievearray);

改变,

and proc:

到,

end proc:

在所有这些打印语句中将所有单右引号(uneval 引号,到 Maple)更改为单左引号(名称引号)或双引号。更好的是,使用userinfo 语句。

尝试像这样可靠地调用 gc() 不一定会像您期望的那样工作。

【讨论】:

  • 通过“将所有单右引号(uneval 引号,到 Maple)更改为单左引号(名称引号)”,您的意思是将 ' 更改为 ` 其中 ` 就在数字旁边1 在键盘上和选项卡按钮上方?
  • 这就是我的意思。此外,您在本地 A 上调用 LinearAlgebra 命令(就好像它是一个矩阵一样),但我看不到 A 以前在哪里被分配了一个矩阵作为其值。
  • 是的,每次我输入 QS(n1); 时都会出错。其中 n1 是一个整数。错误是:错误,(在QS)无效的输入:ArrayNumElems预计其第一参数,A,为类型rtable,但接收到的初始化(2540587679940794667690340687375550680603346659692067329168497773203605001736492172162186753216639546135203926161393,1.4,9)[6] 跨度>
  • 我从books.google.com/… 第 362 页获得了代码。尽管您提供的帮助已经绰绰有余,但如果您有时间,您可以自己查看代码吗,因为我真的希望这个程序能够工作,但是无法让它这样做。
  • 您在复制QS 过程时(至少)省略了A:=rels[3]; 行。我对输入所有较早的例程sieveInitialization 持谨慎态度,因为后者又调用MultSelect...并且可能有相当多的代码。我希望你明白,你需要InitializationsieveMultSelect 以及其他所有电话。
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 2023-03-05
  • 2014-05-10
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2018-05-16
  • 2020-03-05
相关资源
最近更新 更多