我想知道这个算法的复杂性是什么。 N> = 3作为输入的整数。谢谢!
initialisation : i=2
LOOP:
if N%i==0
return 1;
if i == [sqrt(N)]
return 0;
i= i + 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)
是因为在算法结束为素数输入之前你得到了多少次迭代。