要打印介于1和20之间的素数,我使用了以下代码。 虽然我知道输出是错误的,因为缩进,但我特别想了解这里发生了什么。 能请人帮帮我吗。
flag = True
for i in range(2,n):
if n % i == 0:
flag = False
break
if flag :
print (n)
输出情况如下:3 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
if flag:print(n)
语句需要位于for i in range(2,n)
循环之外,否则它将被打印,直到n%i==0
为true
。 注意,要包含20,您将需要调用range(1,21)
(原因如下)。 下面是我的代码:
for n in range(1, 21):
if n == 1:
continue # 1 is not prime
flag = True
for i in range(2, n):
if n % i == 0:
flag = False
break
if flag:
print(n)
虽然上面的代码不是最好的,但这一个更好:
from math import floor
for n in range(1, 21):
if n < 2:
continue
if n==2:
print(n)
if not n%2:
continue
for d in range(3, floor(n**0.5)+1, 2):
if not n%d:
break
print(n)