python中有多少个介于100和200之间的素数

2024-03-28 10:05:00 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我是来自java背景的python新手,我很难习惯python的语法、作用域和循环等。这是我的导师提出的一个问题,我不知道我做错了什么

Q.编写一个函数或使用一些if-else语句来计算100到200之间有多少素数

def isPrime(num):
    if num > 1:
        for i in range(2, num):
            if(num % i) == 0:
                return True

def primeNumbers():
    count = 0

    for num in range(100, 200):
        prime = isPrime(num)
        if prime == True:
            count += 1
    
    print(count)

primeNumbers()

Tags: intrueforifdefcountrangejava
3条回答

基本上你的isPrime函数是错误的。当数字可除(即非素数)时,它返回True,并且从不返回False。固定版本为:

def isPrime(num):
    if num > 1:
        for i in range(2, num):
            if (num % i) == 0:
                return False
        return True
    else:
        return False

也就是说,您的程序的一个更具Pythonic(和PEP-8兼容)的版本可以是:

def is_prime(num):
    if num > 1:
        for i in range(2, int(num ** 0.5) + 1):
            if num % i == 0:
                return False
        return True
    else:
        return False


def prime_numbers(start, end):
    count = 0
    for num in range(start, end):
        if is_prime(num):
            count += 1
    return count


print("The number of prime numbers between 100 and 200 is", prime_numbers(100, 200))

您的程序实际上返回的是非素数的计数。
如果数字可以被整除,则isPrime函数返回True 由一个介于2和num之间的数字。 该功能应为:

def isPrime(num):
    if num > 1:
        for i in range(2, round(num**0.5)+1): # No need to search up to num
            if(num % i) == 0:
                return False
        return True
    return False

或者在primeNumbers函数中打印100 - count

你也可以检查一下埃拉托什尼的筛子

isPrime(num)

def isPrime(num):
    if num > 1:
        for i in range(2, num):
            if(num % i) == 0: # <-- this condition
                return True # <-- this return value

注意if(num % i) == 0:检查num余数被i除后是否为0,这意味着您要检查i是否可被num除。但是如果这个条件为真,那么num不是素数,所以你必须return False。如果这个条件对于{}中的每一个{}都是{},那么你可以确信{}是素数

我想指出的一点是,如果inum的除数,那么num/i也是一个除数。所以在现实中,您只想检查从2sqrt(num)num ** 0.5的范围

建议代码:

def isPrime(num):
    if num > 1:
        for i in range(2, int(num ** 0.5)):
            if(num % i) == 0:
                return False
        reuturn True
    else:
        return False

p/s:正如其他人指出的,您不应该在这个项目中真正使用普通素数测试,而是使用Sieve of Eratosthenes

相关问题 更多 >