素数算法的复杂性是多少?

时间:2018-05-05 04:54:18

标签: algorithm conditional complexity-theory

我想知道这个算法的复杂性是什么。 N> = 3作为输入的整数。谢谢!

initialisation : i=2
LOOP:
if N%i==0
     return 1; 
if i == [sqrt(N)]
     return 0; 
i= i + 1;

1 个答案:

答案 0 :(得分:0)

initialisation : i=2
LOOP:
if N%i==0
     return 1;       # 1 <-----
if i == [sqrt(N)]
     return 0;       # 2 <-----
i= i + 1;

案例1:N是偶数。然后我们在O(1)完成了 - 请参阅第(# 1行)。或者N是奇数,而非素数。然后,当我们达到N的除数时(这将在平方根之前或同时发生),我们就完成了。

案例2:N是素数。然后,我们会在完成之前点击[ n^0.5 ]个数字(请参阅第# 2行)。

但是,正如@Lutzl在评论中指出的那样,精确计算可能会考虑runtime of the division involved。这有点不合适,因为我们不知道使用什么乘法和除法算法。但总运行时间为O(max{a * sqrt(N), sqrt(N)}),其中O(a)N % i == 0检查的运行时。我在这里假设实际的平方根计算实际上是恒定时间,并且只进行一次,因此O(n^0.5)是因为在算法结束为素数输入之前你得到了多少次迭代。