python - 需要帮忙!使用 python 计数素数

标签 python algorithm numbers time-complexity primes

计算小于非负数 n 的素数的个数。我创建了以下代码,但复杂度太高。如果有人能给我更好的解决方案,我将不胜感激。

import math
class Solution(object):
    def countPrimes(self, n):
        PrimeCount=0
        primelist=[]
        for i in range(2,n):
            if self.primeCheck1(i,primelist)==True:
                primelist.append(i)       #try2 with new logic
                PrimeCount=PrimeCount+1

        return PrimeCount



    def primeCheck1(self,n,primelist):
        flag=False
        if n==2:
            return True
        elif n==3:
            return True
        sqroot=int(math.sqrt(n))

        for j in range(0,sqroot):
            if n%primelist[j]==0:
                flag=True
                break

        if flag!=True:
            return True
        else:
            return False

最佳答案

我喜欢您构建素数列表并使用该列表检测更大素数的方式。没错,您的代码比需要的复杂得多,特别是不需要您的 flag 变量。

您在 primeCheck1() 方法中也遗漏了一些可以加快速度的技巧。由于我的 Python 不存在,因此这是类似 Python 的伪代码。我假设您将能够转换它。

def primeCheck1(self, n, primelist):

  # Handle even numbers.
  if n % 2 == 0:
        # The only even prime is 2.
        return (n == 2)

  # Handle multiples of 3.
  if n % 3 == 0:
        return (n == 3)

  # Handle remaining numbers.
  sqroot = int(math.sqrt(n))

  for j in range(0, sqroot):
    if n % primelist[j] == 0:
      return False  # Not a prime number.

  # If we get this far then the number is prime.
  return True

end primeCheck1

在一个小问题上,您习惯于不分隔代码:a==b 而不是 a == b。使用空格作为分隔符使代码更易于阅读。

关于python - 需要帮忙!使用 python 计数素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395600/

相关文章:

python - 使用日期时间索引的 Pandas 过滤

python - 使用 pyinstaller 的备用/tmp 位置

java - 检查字符串的所有字符是否包含相同的次数

javascript - 理解下划线对 isNaN 的实现

javascript - 将数字而不是字符串传递给 parseFloat()

python - 使用python从word文件中的评论中删除个人信息

c++ - 在 Python 中扩展的 C++ 类中的段错误回调问题

algorithm - 没有给定模式的可能板数

java - 通过打印所有可能的方式递归硬币找零

c - 彼此不匹配的随机数