Python 向用户打印素数';s输入
我正在制作一个快速程序,要求用户输入一个数字,然后输出该数字之前的所有素数:Python 向用户打印素数';s输入,python,python-3.x,Python,Python 3.x,我正在制作一个快速程序,要求用户输入一个数字,然后输出该数字之前的所有素数: n=int(input("Enter a number: ")) a=2 if n<=1: n=int(input("Enter another number: ")) while a<n: for i in range(2,n): if a%i==0: break else: print (a)
n=int(input("Enter a number: "))
a=2
if n<=1:
n=int(input("Enter another number: "))
while a<n:
for i in range(2,n):
if a%i==0:
break
else:
print (a)
break
a=a+1
可以从1开始循环 您的循环将从1开始,因此您将在输出中得到2 您有两个错误:
else
缩进不正确,因此它与if
而不是for
(如果a
下面的所有值都不是a
的因素,而不是第一个不是a
的因素,则要打印);及
范围
上升到n
,而不是a
(因此始终包括a
,以及a%a==0
)for a in range(2, n):
for i in range(2, a):
if a % i == 0:
break
else:
print(a)
注意:我使用了一个
for
循环来替换外部while
,当您已经知道在哪里停止时,这通常会更好。您可以通过检查a
的平方根,省去除2
以外的偶数,使代码更高效,但我将把这些优化留给您 您还有其他问题,9和15不是prime。在for
循环中,您对if
和else
都使用break
,这意味着您的for
循环将只执行一次(for i=2
)。简言之,您正在通过2
检查可除性,奇数不会统计可除性。这就是为什么你会得到所有的奇数。
for a in range(2, n):
for i in range(2, a):
if a % i == 0:
break
else:
print(a)