在python中打印素数

时间:2018-06-18 08:30:45

标签: python loops logic

我正在尝试在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.请告诉代码的逻辑是否有任何问题(忽略效率问题)。

9 个答案:

答案 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)

它更有效,因为它避免了偶数,并且还检查奇数除数直到数字的平方根,这比只检查给定数字的一半更有效