IsNumberPrime(int num):
if num <= 1: return False
i = 0
end = sqrt(num)
while ArrayOfPrimes[i] <= end:
if (num % ArrayOfPrimes[i]) == 0: return False
i = i + 1
return True
此算法检查给定的数字是否为素数.ArrayOfPrimes是包含前[000,5]的数字,如[2,3,5,7,11 ...]。根据我的方法,因为这个算法只检查给定数字的平方根,所以它不应该超过sqrt(n)/ 2所以我的理解说它应该是sqrt(n)。例如,如果数字是19,那么它只会检查直到A [i] <= 4.8,即只检查2次。
答案 0 :(得分:1)
该算法的确切复杂度为O(⌊sqrt(num)⌋-1)
这是检查次数((num%ArrayOfPrimes [i])== 0)条件。
在第19号情况下,该算法将进行3次检查:2,3,4
答案 1 :(得分:0)
要获得确切的复杂性,您必须知道ArrayOfPrimes
中小于sqrt(num)
的托管数量。最糟糕的情况是,你必须检查所有这些。
因此如果pi(sqrt(num))
number of primes低于sqrt(num)
,那么复杂性就是
O(pi(sqrt(num))) = O(sqrt(num) / log(num))