Algorithm 为什么因子分解在NP中,而不是在P中?

Algorithm 为什么因子分解在NP中,而不是在P中?,algorithm,time-complexity,np,Algorithm,Time Complexity,Np,因子分解:Gven一个整数N,找到整数1

因子分解:Gven一个整数N,找到整数1 我知道素性检验在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))为单位运行。

单个数值的输入大小通过其二进制表示的长度来测量。准确地说,输入数值
n
的大小与
log_2(n)
成正比。因此,您的算法以指数时间运行

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


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

哦,亲爱的,你一定已经证明了NP=p输入的大小是表示它所需的位数,而不是输入的值。如果你真的想问为什么密码学能工作,RSA之类的东西很难破解,你就忽略了一个事实,那就是它是模分解。多项式时间素性测试算法与此算法完全不同,顺便说一句。对不起,我还是不明白为什么现在是指数时间。那么,对于输入大小N,它实际上是2^N,你的意思是?@Nayana算法运行于O(sqrt(2^N))=大约O(1.414^N),其中N是存储输入数字N所需的位数(即N=log2(N))。@interjay知道了!输入量非常小,因此看起来正常的时间与问题的大小成指数关系:)@phoeagon我认为阿披舍克·班萨尔之前所说的也有点道理。假设我们传递一个数组,并尝试在数组中找到一个特定的数字。问题的运行显然是O(N),但问题的大小又是S=log2(N),因为它是通过二进制表示的长度来度量的?这种解释使得每一个多项式时间算法都是指数的…@Nayana或者试着这样想。以单个数值作为输入的问题很可能是一个数学问题,因此预计它将处理巨大的数字。此外,如果我们考虑小于
V
的值数组的
O(logV)
部分,那么我们必须进行替换。
O(NlogN)
的反函数并非微不足道,可能会引起混淆。此外,在
N
NlogN
之间确实是一个小差异,但在
1
logN
N
之间则不是。