Python 数到给定数的素数

Python 数到给定数的素数,python,python-3.x,Python,Python 3.x,我目前正在尝试创建一个函数来计算素数的个数,直到一个给定的数字。然而,我认为我的代码的逻辑有一些问题,因为我目前没有得到正确数量的素数。有人能帮我找出我的代码有什么问题吗?谢谢 def count_primes(num): ctr = 0 for i in range(num+1): for x in range(2,i): if (i%x) != 0: ctr += 1 b

我目前正在尝试创建一个函数来计算素数的个数,直到一个给定的数字。然而,我认为我的代码的逻辑有一些问题,因为我目前没有得到正确数量的素数。有人能帮我找出我的代码有什么问题吗?谢谢

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

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

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

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

你能解释一下你如何找到素数的逻辑吗?在第二个for循环中,当你打破它时,你只迭代一次,不管你在for循环中添加一些printi和printx语句时看到了什么?您尝试过这个吗?请注意,您的解决方案对于isPrime1返回True