首页 > 解决方案 > 计算素数的数量直到给定数量

问题描述

我目前正在尝试创建一个函数来计算素数的数量直到给定的数字。但是,我认为我的代码逻辑存在一些问题,因为我目前没有取回正确数量的素数。谁能帮我确定我的代码有什么问题?谢谢!

def count_primes(num):
    ctr = 0

    for i in range(num+1):
        for x in range(2,i):
            if (i%x) != 0:
                ctr += 1
                break
            else:
                break
            

    return ctr

print(count_primes(10))
#I get 4
print(count_primes(100))
#I get 49

标签: pythonpython-3.x

解决方案


逻辑问题如下 - 对于每个数字,您只需检查它是否可被 2 整除并中断。让我们模拟一下i=9。那么对于x=2,(9 %2)!=0但 9 不是素数而是算作一。检查以下代码 -

def isPrime(n):
    if not isinstance(n, int):
       raise ValueError('n must be integer')
    if n <= 0:
       raise ValueError('n is negative or zero')
    if n==1: return False
    for i in range(2, n):
        if n %  i == 0:
           return False
    return True


def countPrime(n):
    ctr = 0
    for i in range(1, n+1):
         if isPrime(i):
            ctr += 1
    return ctr

免责声明 - 有更有效的方法来检查一个数字是否是素数


推荐阅读