linux中factor命令背后的算法是什么?
factor命令打印指定整数的素数。 当我尝试的时候linux中factor命令背后的算法是什么?,linux,algorithm,command,Linux,Algorithm,Command,factor命令打印指定整数的素数。 当我尝试的时候 factor 12345678912345678912 即使是如此庞大的数字,也会在工厂内产生影响 它使用的是哪种算法?以下是一个GNU因子源版本的示例: 它包括审判组和波拉德的rho的例行程序。在快速扫描中,我觉得它似乎使用了试算法来寻找一些小因素(最多约为lg(n)^2,在本例中约为4000),然后Pollard,如果剩下的可能不是prime。在这种情况下,如果我对4000的看法是正确的,那就是205432623008947,即351
factor 12345678912345678912
即使是如此庞大的数字,也会在工厂内产生影响
它使用的是哪种算法?以下是一个GNU因子源版本的示例: 它包括审判组和波拉德的rho的例行程序。在快速扫描中,我觉得它似乎使用了试算法来寻找一些小因素(最多约为
lg(n)^2
,在本例中约为4000),然后Pollard,如果剩下的可能不是prime。在这种情况下,如果我对4000的看法是正确的,那就是205432623008947
,即35129*5847949643
在您的示例中,第二大素数因子是
35129
,最大素数因子的平方根约为76471
。因此,单是审判司就很快,因为它只需要审判大约2.5万名候选人。Gnu coreutils手册通知正在使用的候选人
来自:
算法:
因子
的速度非常快。然而,这不是魔法;如果你选择病理学上难以分解的数字,它会显著减慢
的潜在安全性是基于分解2个大的协素数的困难。那么,让我们看看我们可以如何努力推动大共模的因子。能够进行因式分解的最大数factor
是2127-1(可能在内部用int64_t表示),它恰好是素数:
$ factor $(bc <<< 2^127)
factor: ‘170141183460469231731687303715884105728’ is too large
$ factor $(bc <<< 2^127-1)
170141183460469231731687303715884105727: 170141183460469231731687303715884105727
$ factor $(bc <<< 2^127-2)
170141183460469231731687303715884105726: 2 3 3 3 7 7 19 43 73 127 337 5419 92737 649657 77158673929
$
$factor$(bc)
$ primes $(bc <<< 2^60) | head -2
1152921504606847009
1152921504606847067
$ bc <<< 1152921504606847009*1152921504606847067
1329227995784916015866073631529372603
$ time factor 1329227995784916015866073631529372603
1329227995784916015866073631529372603: 1152921504606847009 1152921504606847067
real 0m30.628s
user 0m30.578s
sys 0m0.004s
$