保理: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))中运行。
答案 0 :(得分:17)
单个数值的输入大小,由其二进制表示的长度来衡量。确切地说,输入数值n
的大小与log_2(n)
成比例。因此,您的算法在指数时间内运行。
例如,假设我们使用您的算法计算数字N
。如果N
为素数,则必须至少测试sqrt(N)
个因子。 (或者,您可以为此计算素数表,但它仍然不是线性的。)
无论如何,您要测试sqrt(N)
次。但问题的大小定义为S=log2(N)
。所以我们有N=2^S
。因此,它是sqrt(2^S)=2^(S/2)
是指数级的。