Python 小于501的素数
我试图找到所有大于2小于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:
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.')