Python 小于501的素数

Python 小于501的素数,python,python-3.x,math,primes,Python,Python 3.x,Math,Primes,我试图找到所有大于2小于501的素数。请参考下面给出的我的代码: num = 501 x = int(input('Enter a number greater than 1: ')) if x > 1: for i in range(2, num): if x % i == 0: result = False else: result = True if result == True:

我试图找到所有大于2小于501的素数。请参考下面给出的我的代码:

num = 501

x = int(input('Enter a number greater than 1: '))

if x > 1:
    for i in range(2, num):
        if x % i == 0:
            result = False
    else:
        result = True

    if result == True:
        print('Prime number.')
    else:
        print('Not a prime number.')
else:
    print('Not a prime number.')
我试着运行19和99这两个数字的代码。当我在下面给出的代码后面加上一个“break语句”时,得到的结果是“99:不是质数”,而是“19,作为质数被打印为非质数”,反之亦然

if x % i == 0:
        result = False
        break

请更正上面的代码以打印正确的输出。

如果我没有弄错的话,对于501以下的所有数字,这将始终返回false,因为任何输入的数字都可以被自身整除。
您还应该检查x!=i、 如果我没有弄错的话,对于501以下的所有数字,这将始终返回false,因为任何输入的数字都可以被自身整除。 您还应该检查x!=i、

这将起作用:

import math   # This will import math module

def isprime(x):
    if x > 1:
        result = True
        for i in range(2, int(math.sqrt(x))+1 ):
            if ( x % i == 0):
                result = False
                break
        if ( result == True):
            print("Prime Number ")
        else:
            print("Not a Prime Number")
并进行如下函数调用:

 isprime(19)
这将有助于:

import math   # This will import math module

def isprime(x):
    if x > 1:
        result = True
        for i in range(2, int(math.sqrt(x))+1 ):
            if ( x % i == 0):
                result = False
                break
        if ( result == True):
            print("Prime Number ")
        else:
            print("Not a Prime Number")
并进行如下函数调用:

 isprime(19)

使用埃拉托斯提尼筛(Eratosthenes)比使用试算法快得多,埃拉托斯提尼筛是2000多年前希腊数学家发明的:

def primes(n): # sieve of eratosthenes
    i, p, ps, m = 0, 3, [2], n // 2
    sieve = [True] * m
    while p <= n:
        if sieve[i]:
            ps.append(p)
            for j in range((p*p-3)/2, m, p):
                sieve[j] = False
        i, p = i+1, p+2
    return ps
def素数(n):#埃拉托斯烯筛
i、 p,ps,m=0,3,[2],n//2
筛子=[True]*m

虽然p不使用试除法,但使用埃拉托斯提尼筛要快得多,埃拉托斯提尼筛是2000多年前希腊数学家发明的:

def primes(n): # sieve of eratosthenes
    i, p, ps, m = 0, 3, [2], n // 2
    sieve = [True] * m
    while p <= n:
        if sieve[i]:
            ps.append(p)
            for j in range((p*p-3)/2, m, p):
                sieve[j] = False
        i, p = i+1, p+2
    return ps
def素数(n):#埃拉托斯烯筛
i、 p,ps,m=0,3,[2],n//2
筛子=[True]*m
而p
请更正上述代码以打印正确的输出

我相信以下是您代码的简化版和更正版:

number = int(input('Enter a number greater than 1: '))

if number > 1:
    for divisor in range(2, int(number ** 0.5) + 1):
        if number % divisor == 0:
            print('Not a prime number.')
            break
    else:  # no break
        print('Prime number.')
else:
    print('Not a prime number.')
这段代码可以工作,但不是最优的。一个简单的优化方法是将2/偶数作为特例处理,只除以从3开始的奇数。如@user448810所示,一个重要的优化是切换到筛选方法

您提供的代码只测试每个用户输入的一个数字。如果要将其转换为测试一系列数字的循环,例如所有大于2但小于501的数字,则可以执行以下操作:

for number in range(3, 501):

    if number > 1:
        for divisor in range(2, int(number ** 0.5) + 1):
            if number % divisor == 0:
                print(number, 'is not a prime number.')
                break
        else:  # no break
            print(number, 'is a prime number.')
    else:
        print(number, 'is not a prime number.')
请更正上述代码以打印正确的输出

我相信以下是您代码的简化版和更正版:

number = int(input('Enter a number greater than 1: '))

if number > 1:
    for divisor in range(2, int(number ** 0.5) + 1):
        if number % divisor == 0:
            print('Not a prime number.')
            break
    else:  # no break
        print('Prime number.')
else:
    print('Not a prime number.')
这段代码可以工作,但不是最优的。一个简单的优化方法是将2/偶数作为特例处理,只除以从3开始的奇数。如@user448810所示,一个重要的优化是切换到筛选方法

您提供的代码只测试每个用户输入的一个数字。如果要将其转换为测试一系列数字的循环,例如所有大于2但小于501的数字,则可以执行以下操作:

for number in range(3, 501):

    if number > 1:
        for divisor in range(2, int(number ** 0.5) + 1):
            if number % divisor == 0:
                print(number, 'is not a prime number.')
                break
        else:  # no break
            print(number, 'is a prime number.')
    else:
        print(number, 'is not a prime number.')