为什么认为分解大整数很困难?


17

我在某处读到,发现最有效的算法可以计算时间的因数,但是我写的代码是或可能是具体取决于快速除法和模数。我敢肯定我在某个地方误解了一些东西,但是我不确定在哪里。这就是我以伪代码形式编写。O(exp((64/9b)1/3(logb)2/3)O(n)O(nlogn)

function factor(number) -> list
    factors = new list
    if number < 0
        factors.append(-1)
        number = -number
    i = 2
    while i <= number
        while number % i == 0
            factors.append(i)
            number /= i
        i++
    return factors

3
Google“伪多项式”。
拉斐尔

该算法实际上非常慢-如果数字是质数,则在迭代(数字)次时循环。有一个非常简单的参数,可让您摆脱sqrt(数字)迭代的麻烦。
gnasher729 2015年

Answers:


26

您正在将数字与表示n所需的位数混淆。这里b =以表示所需要的比特的数目Ñ(所以b LG Ñ)。这有很大的不同。甲ø Ñ -time算法是Ô 2 b -time算法-在比特数的指数。相比之下,您发现的“高效”算法的运行时间在b中为次幂。nnb=nblgnO(n)O(2b)b

n=2,000,000b=21nO(2b1/3)O(2b)O(n)

参见https://en.wikipedia.org/wiki/Integer_factorization


1
I knew it was something simple like that.
EnderShadow

3
@EnderShadow: Also, the kind of numbers whose factoring is considered hard using currently available hardware, and used e.g. in RSA encryption, have b>1,000 (i.e. n>21,000) or so. As an exercise, assuming that you computer can run your O(n) algorithm at, say, one billion iterations per second, calculate how many years it would take to factor n21,000. (If your initial reaction is "that can't be right!", you've probably calculated it correctly.)
Ilmari Karonen

1

您在这里大概有两个问题,一个关于您的代码的一般性问题和一个特定的问题。具体的一个在另一个答案中处理。标题中关于保理复杂性的一般问题非常深刻。不幸的是,没有(除大多数情况外)“很多专家尝试过并失败”以外,没有强大的科学证据表明保理是在P之外的,并且一些专家猜测它在P内;它被视为复杂性理论中最重要的(也是很难解决的)开放问题之一。经过数十年的“重击”,最佳算法是指数级的。分解复杂性是已知的“很少有的特殊问题”之一,它位于完整的 P和NP 之间,但至今尚未归类。

如所指出的,直到1980年代中期RSA加密系统中使用(“大致”)复杂性才成为问题,其中加密安全性取决于假设。(另外两个“不太令人鼓舞”的相关数据点:在2000年代早期,著名/著名的AKS算法证明了用于P时间量子分解和素数测试的Shors算法已在P中使用。)可能的积极结果是,它的多项式时间比NP complete弱(假设P≠NP和NP complete具有指数时间下限),但在技术上仍然“困难”。

到目前为止,尚未找到对此关键主题的出色调查。但是也可以


另一个看似“边缘情况”的可能情况是因式分解可以在P中进行,但仍然没有可行的算法。又名星系算法
vzn

应该提到的是,RSA是关于分解两个大质数的乘积(有人知道质数并将它们相乘,而其他人被给予乘积并应该找到质数)。可以想象,可能有一种算法可以分解两个大素数的乘积,但不能分解两个以上大素数的乘积。正如大质数(但事先不知道是大质数)的因式分解可以在多项式时间内完成。
gnasher729
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.