Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python打印素数_Python_Loops_Logic - Fatal编程技术网

用python打印素数

用python打印素数,python,loops,logic,Python,Loops,Logic,我试图用python打印3-50范围内的素数。代码如下: 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。请告知代码的逻辑是否有任何错误(忽略效率问题) 当i=4时,范围将为范围(2,2),即0。它不会进入if(i%j==0):块。因此,当i=4时,您的标志将

我试图用python打印3-50范围内的素数。代码如下:

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。请告知代码的逻辑是否有任何错误(忽略效率问题)

当i=4时,范围将为范围(2,2),即0。它不会进入if(i%j==0):块。因此,当i=4时,您的标志将始终为0

解决这个问题的一个方法是,如果我是4,就加上一个检查

if(flag==0 and i != 4):
编辑:正如其他人评论的那样,将范围增加1比检查值是否为4更好

for j in range(2,int(i/2)+1)
当i=4时,范围将为范围(2,2),即0。它不会进入if(i%j==0):块。因此,当i=4时,您的标志将始终为0

解决这个问题的一个方法是,如果我是4,就加上一个检查

if(flag==0 and i != 4):
编辑:正如其他人评论的那样,将范围增加1比检查值是否为4更好

for j in range(2,int(i/2)+1)
这张照片 3. 5. 7. 11 13 17 19 23 29 31 37 41 43 47

4%2=0

4%3=1

所以如果你从3开始,你会错过4%2=0

这张照片 3. 5. 7. 11 13 17 19 23 29 31 37 41 43 47

4%2=0

4%3=1


因此,如果从3开始,您将忽略4%2=0,对于4,它可能不会进入if循环。所以我增加了我的射程

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)

对于4,它可能不进入if循环。所以我增加了我的射程

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)

如果你的名单上有更大的数字,你应该改变

range(2,int(i/2)+1)
为了


例如,400将在20之前尝试数字,而不是200。

如果您的列表中有更大的数字,您应该更改

range(2,int(i/2)+1)
为了

例如,400将尝试数字直到20而不是200。

尝试
对于范围(2,i)中的j:
如果从3开始并一直持续到4,则数字4可整除为1,2,4,但不能找到任何除数,这就是为什么它将4视为范围(2,i)中的j的素数。

尝试
如果从3开始一直到4,那么数字4可以被整除,是1,2,4,但不是4,你找不到任何除数,这就是为什么它将4视为素数的原因

范围(3,i)
更改为
范围(2,i)
,因为如果我们使用
范围(3,i)
,4不会被2除掉。结果,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
我们不需要检查除所有数字,直到数本身为素数。因为如果我们只为了提高效率而检查到给定数字的一半。

范围(3,i)
更改为
范围(2,i)
,因为如果我们使用
范围(3,i)
,4不会被2除。结果,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)
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) 
但是,更具结构性和效率的方法是使用以下各项:-

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
我们不需要检查除所有数字,直到数本身为素数。因为如果我们能检查到给定数字的一半,只为了提高效率

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) 
在上面的代码中,我们从最小值到最大值运行for循环,并将值存储在i中

for i in range (a,b+1):

然后我们检查存储在i中的数字是否大于1,因为所有的数字都可以被1整除,我们不想考虑它。

 if  i>1:
在此之后,我们运行另一个循环,这次是从2到1,比i中存储的数字少

for c in range(2,i):
现在,我们检查存储在i中的数字是否可以被2到1中的任何一个数字整除

if i%c == 0:
如果是,那么很明显,它不是一个素数,我们打破了循环

break
如果没有,我们打印号码

else:
    print(i)
在上面的代码中,我们从最小值到最大值运行for循环,并将值存储在i中

for i in range (a,b+1):

然后我们检查存储在i中的数字是否大于1,因为所有的数字都可以被1整除,我们不想考虑它。

 if  i>1:
在此之后,我们运行另一个循环,这次是从2到1,比i中存储的数字少

for c in range(2,i):
现在,我们检查存储在i中的数字是否可以被2到1中的任何一个数字整除

if i%c == 0:
如果是,那么很明显,它不是一个素数,我们打破了循环

break
如果没有,我们打印号码

else:
    print(i)

对于
i=4
,在
(2,2)
范围内运行
j
,该范围为空。如果你将端点增加1,你会发现一个因子。正如@khelwood建议的那样,将范围(2,int(i/2))中j的
行更改为范围(2,int(i/2)+1)中j的
它应该可以工作。请检查编辑的版本,它仍然给我4作为输出,我说增加端点。我没说增加起点。如果你从3开始你的射程,你仍然错过了2。如果我从3开始j有什么问题?请参考之前错误发布的代码的编辑版本…对于
i=4
,您在
(2,2)
范围内运行
j
,该范围为空。如果你将端点增加1,你会发现一个因子。正如@khelwood建议的那样,将范围(2,int(i/2))中j的
行更改为范围(2,int(i/2)+1)中j的
它应该可以工作。请检查编辑的版本,它仍然给我4作为输出,我说增加端点。我没说增加起点。如果你从3开始你的射程,你仍然错过了2。如果我从3开始j有什么问题?请参考之前错误发布的代码的编辑版本…您能告诉我将范围更改为(2,i)有什么区别吗?因为您希望在i%j等式中有2。4%2=0 4%3=1你能告诉我把范围改成(2,i)有什么区别吗?因为你想在i%j方程中有2。4%2=0 4%3=1最好解释代码。最好解释代码。