为什么要考虑NP,而不是P?

Nay*_*ana 10 algorithm time-complexity np

因子:Gven是一个整数N,找到整数1 <a,b <N,如果它们存在则N = ab,否则说N是素数.

我知道素数测试是在P中,但为什么不考虑因素?

这是我的算法:

For each a = 1 ... sqrt(N)
    if(N % a == 0)
        b = N/a
        add (a,b) to the result
    Endif
EndFor
Run Code Online (Sandbox Code Playgroud)

它以O(sqrt(N))运行.

pho*_*gon 17

单个数值的输入大小由其二进制表示的长度来度量.确切地说,输入数值的大小与... n成比例log_2(n).因此,您的算法在指数时间内运行.

例如,假设我们N使用您的算法计算一个数字.如果N是素数,你必须测试至少sqrt(N)因素.(或者,您可以为此计算素数表,但它仍然不是线性的).

无论如何,你测试sqrt(N)时间.但问题的大小定义为S=log2(N).所以我们有N=2^S.因此它是一个sqrt(2^S)=2^(S/2)具有指数意义的.

  • @Nayana算法在O(sqrt(2 ^ n))=约O(1.414 ^ n)中运行,其中n是存储输入数N所需的比特数(即n = log2(N)). (2认同)
  • @Nayana还是试着这么想.单个数值作为输入的问题可能是一个数学问题,因此预计会操纵巨大的数字.此外,如果我们考虑小于'V`的值数组的'O(logV)`部分,那么我们必须进行替换."O(NlogN)"的反函数不是微不足道的,可能会引起混淆.此外,在"N"和"NlogN"之间确实是一个很小的区别,但在"1","logN"和"N"之间并非如此. (2认同)