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

时间:2013-11-19 14:29:29

标签: 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

这在O(sqrt(N))中运行。

1 个答案:

答案 0 :(得分:17)

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

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

无论如何,您要测试sqrt(N)次。但问题的大小定义为S=log2(N)。所以我们有N=2^S。因此,它是sqrt(2^S)=2^(S/2)是指数级的。