Prime计算缺少第一个素数

时间:2015-12-15 02:50:35

标签: python primes

请帮我修改我的代码,该代码应该使用数字因子筛来确定素数:

demo_table old

enter image description here

2 个答案:

答案 0 :(得分:1)

以下是您的功能的最小修复:

def primeNumbers(num):
    primes = []
    i = 2
    while i <= num:
        k = 2
        isPrime = True
        while k*k <= i:
            if i%k == 0:
               isPrime = False
            k += 1
        if isPrime:
            primes.append(i)
        i += 1
    return primes

重要的变化是测试while k*k <= i,它取代了while k*k < num

请注意,也可以进行一些效率提升(例如,在设置isPrimeFalse时断开循环,并且仅检查素数除数),但这应该给出正确的结果。

答案 1 :(得分:-1)

尝试此选项以确定素数(using sieve algorithm):

def primes(n): 
   if n==2: return [2]
   elif n<2: return []
   s=range(3,n+1,2)
   mroot = n ** 0.5
   half=(n+1)/2-1
   i=0
   m=3
   while m <= mroot:
      if s[i]:
         j=(m*m-3)/2
         s[j]=0
         while j<half:
            s[j]=0
            j+=m
      i=i+1
      m=2*i+3
   return [2]+[x for x in s if x]

print primes(5)
# prints: [2, 3, 5]