Python 使用嵌套for循环生成素数

Python 使用嵌套for循环生成素数,python,algorithm,numbers,primes,primality-test,Python,Algorithm,Numbers,Primes,Primality Test,我创建了一个素性测试算法,但它不起作用 从本质上讲,我的计划采取了以下步骤: 要求用户提供查找素数的上下限 一个数组,primes,将存储我的primes 嵌套for循环;循环的第一个获取用户上下限之间的每个数字,然后检查这些数字中的每一个是否都可以被2和用户上限之间的任何数字整除 如果上界和下界之间的任何数字都可以被2和用户上界之间的任何数字整除,那么这个数字显然不是素数 否则,数字将附加到数组素数: 然而,不管一个数字是否为素数,函数总是输出no,但我不知道为什么 修复了它。首先,我执行

我创建了一个素性测试算法,但它不起作用

从本质上讲,我的计划采取了以下步骤:

  • 要求用户提供查找素数的上下限
  • 一个数组,primes,将存储我的primes
  • 嵌套for循环;循环的第一个
    获取用户上下限之间的每个数字,然后检查这些数字中的每一个是否都可以被2和用户上限之间的任何数字整除
  • 如果上界和下界之间的任何数字都可以被2和用户上界之间的任何数字整除,那么这个数字显然不是素数
  • 否则,数字将附加到数组素数:

然而,不管一个数字是否为素数,函数总是输出no,但我不知道为什么

修复了它。首先,我执行了floor division
/
操作符,因此它返回一个整数。另外,我提出了一个条件,除数不能被它自己除。因为否则4就是4的素数

lower=int(输入(“下限:”)
上限=整数(输入(“上限:”)
打印(“介于“+str(下)+”和“+str(上)+”之间的素数:”)
素数=[]
对于范围内的i(下部、上部):
对于范围(2,上限//2)中的数值:
如果i%num==0和num!=i:#这里修改
打印(str(i-(下-1))+“+str(i)+”=否”)
打破
其他:
素数。附加(i)
打印(素数)

Out[1]:[2,3,5,7,11,13,17,19,23,29,31,37,41,43]
修复了它。首先,我执行了floor division
/
操作符,因此它返回一个整数。另外,我提出了一个条件,除数不能被它自己除。因为否则4就是4的素数

lower=int(输入(“下限:”)
上限=整数(输入(“上限:”)
打印(“介于“+str(下)+”和“+str(上)+”之间的素数:”)
素数=[]
对于范围内的i(下部、上部):
对于范围(2,上限//2)中的数值:
如果i%num==0和num!=i:#这里修改
打印(str(i-(下-1))+“+str(i)+”=否”)
打破
其他:
素数。附加(i)
打印(素数)

Out[1]:[2,3,5,7,11,13,17,19,23,29,31,37,41,43]

对于第二个循环,您只需转到upper/2即可。你能得到的最低乘数是2。2x=n有关范围(2,int(上限/2))中的num,请参见
您应该在第二个循环范围中使用
i
。@BillSkiCO-Yup;就这样。真是个愚蠢的家伙mistake@JohnnyMopp它不是可互换的吗?内部循环正在测试
i
是否为素数和
i!=upper
对于第二个循环,您只需转到upper/2即可。你能得到的最低乘数是2。2x=n有关范围(2,int(上限/2))中的num,请参见
您应该在第二个循环范围中使用
i
。@BillSkiCO-Yup;就这样。真是个愚蠢的家伙mistake@JohnnyMopp它不是可互换的吗?内部循环正在测试
i
是否为素数和
i!=上部
非常感谢!事实上,我在过去的一个小时里做了这些更改,并最终意识到了我的每一个错误。@DarkRunner
对于num in range(2,upper//2)
应该是
对于num in range(2,sqrt(I))
非常感谢!事实上,我在过去的一个小时里做了这些更改,并最终意识到了我的每一个错误。@DarkRunner
对于num in range(2,upper//2)
应该是
对于num in range(2,sqrt(I))
lower = int(input("Lower Bound: "))
upper = int(input("Upper Bound: "))

print ("Primes between " + str(lower) + " and " + str(upper) + ": ")

primes = []

for i in range (lower, upper): 
  for num in range (2, upper/2):
    if i % num == 0: 
      print (str(i-(lower-1)) + ". " + str(i) + " = No")
      break
  else: 
    primes.append(i)

print(primes)