我正在尝试在3-50范围内打印python中的素数。这是代码:
for i in range(3,51):
flag=0
for j in range(3,i):
if(i%j==0):
flag=1
if(flag==0):
print(i)
代码运行正常,除了它还打印4.请告诉代码的逻辑是否有任何问题(忽略效率问题)。
答案 0 :(得分:2)
print(2)
for i in range(3,51):
flag=0
for j in range(2,int(i/2)):
if(i%j==0):
flag=1
if(flag==0):
print(i)
当i = 4时,范围将是范围(2,2),即0.它不会进入if(i%j == 0):block。因此,当i = 4时,你的旗帜总是0。
解决问题的一种方法就是只要添加一个支票,如果我是4。
if(flag==0 and i != 4):
编辑:正如其他人评论的那样,通过将范围递增1将比检查值是否为4更好。
for j in range(2,int(i/2)+1)
答案 1 :(得分:1)
start = 3
end = 50
for val in range(start, end + 1):
# If num is divisible by any number
# between 2 and val, it is not prime
if val > 1:
for n in range(2, val):
if (val % n) == 0:
break
else:
print(val)
答案 2 :(得分:1)
a = int(input("enter smaller no."))
b = int(input("enter larger no."))
for i in range (a,b+1):
if i>1:
for c in range(2,i):
if i%c == 0:
break
else:
print(i)
在上面的代码中,我们运行了一个从最小到最大的for循环,并将值存储在i中。
for i in range (a,b+1):
然后我们检查存储在i中的数字是否大于1,因为所有数字都可以被1整除并且我们不想考虑它。
if i>1:
此后,我们运行另一个循环,这次比存储在i中的数字少2到1
for c in range(2,i):
现在,我们检查存储在i中的数字是否可被2到1的数字除以本身的整数。
if i%c == 0:
如果是,那么显然它不是质数,我们打破了循环。
break
如果没有,我们会打印号码。
else:
print(i)
答案 3 :(得分:0)
for i in range(3,51):
flag=0
for j in range(2,i):
if(i%j==0):
flag=1
if(flag==0):
print(i)
这打印 3 五 7 11 13 17 19 23 29 31 37 41 43 47
4%2 = 0
4%3 = 1
因此,如果从3开始,您将错过4%2 = 0
答案 4 :(得分:0)
对于4,它可能不会进入if循环。所以我增加了i的范围。
print(2)
for i in range(3,51):
flag=0
for j in range(2,int(i/2)+1):
if(i%j==0):
flag=1
if(flag==0):
print(i)
答案 5 :(得分:0)
如果您的列表中包含更大的数字,则应更改
range(2,int(i/2)+1)
代表
range(2,math.floor(math.sqrt(n)+1))
例如,400将尝试数字,直到20而不是200。
答案 6 :(得分:0)
尝试for j in range(2,i):
数字4可被整除是1,2,4如果你从3开始并持续到4但不是4你不能找到任何除数,这就是为什么它将4视为一个素
答案 7 :(得分:0)
将range(3,i)
更改为range(2,i)
,因为如果我们使用range(3,i)
,则不会使用除以2来检查4。结果4将作为素数返回。
for i in range(3,51):
flag=0
for j in range(2,i):
if(i%j==0):
flag=1
if(flag==0):
print(i)
但是,更具结构性和效率的方法是使用以下内容: -
def isPrime(num):
for i in range(2,num/2+1):
if (num%i==0):
return False
return True
for i in range(3,51):
if isPrime(i):
print i
我们不需要按所有数字检查除法,直到数字本身为素数。因为如果我们可以检查到给定数字的一半,只是为了提高效率。
答案 8 :(得分:0)
import math
for num in range(1,50):
if num>1:
if num==2:
print(num)
elif num%2==0:
continue
else:
for i in range(3,math.ceil(math.sqrt(num)),2):
if num%i==0:
break
else:
print(num)
它更有效,因为它避免了偶数,并且还检查奇数除数直到数字的平方根,这比只检查给定数字的一半更有效