该素数搜索算法的复杂性

时间:2014-11-23 18:49:15

标签: algorithm big-o

所以我现在正在学习Big O符号,我不知道如何弄清楚Big O对我的跟随(故意效率低下)算法的影响:

def getPrimes(n):

primes = [2]    

for i in range(3, n+1):
    remainder = True
    for j in primes:
        if(i % j == 0):
            remainder = False
    if(remainder == True):
        primes.append(i)
return primes

内部for循环运行的次数将根据列表中有多少项“primes”而增加。那么这对影响大O的影响有什么影响呢?

2 个答案:

答案 0 :(得分:1)

检查Pi(n) function。它的近似值是n / ln(n) 整体算法(一种Eratosthenes实施的Sieve)复杂性is evaluated as O(n(loglog(n))

答案 1 :(得分:1)

每个i都针对少于i的所有素数进行测试。因此,完成的工作总量是:

sum(i=3..n)pi(i)

(其中pi(i)是小于i的素数)。

pi(n)是Theta(n / log n),因此完成的工作量与以下复杂程度相同:

sum(i=3..n)i/log(i)

我认为没有任何好的近似值,但它比O(n ^ 2)好,但不是很多,因为log(i)与i相比增长缓慢。