【问题标题】:Python program to find prime numbers (3.5)查找素数的 Python 程序 (3.5)
【发布时间】:2016-12-01 21:18:28
【问题描述】:

我正在制作一个查找素数的程序。要求用户提供一个大于 2 (n) 的数字,然后程序创建一个从 2 开始到用户的数字 (n) 结束的列表。在我的程序中,我应该将一个名为 current 的变量设置为 2,然后在列表中循环查找电流的倍数并删除它们。在循环结束时,我将 1 添加到 current 并且程序再次循环执行与以前相同的操作。每次都会打印该列表。我的程序运行正常(我正在使用数字 10 作为 n 进行测试),当它到达末尾时,即使它应该被删除,也会留下 10。请帮忙。

这是我的代码:

while True:
    global n
    n = int ( input ( "Please enter a number larger than 2. " ) )
    if n > 2:
        break
    else:
        print ( "Your number is not larger than 2." )
        continue

current = 2
myList = list ( range ( 2, n + 1 ) )
while current < n:
    if current == []:
        break
    for i in reversed ( range ( len( myList )-1 ) ):
        if myList[i] % current == 0 and myList[i] != current and ( myList[i] / current ).is_integer(): myList.pop(i)
        print ( myList )
    current = current + 1

【问题讨论】:

  • 这似乎是一种非常复杂的寻找素数的方法。
  • @DejaVuSansMono 这是一个很常见的家庭作业提示。
  • @TemporalWolf 哦。我不知道。我要说的是,平方根和检查显然更容易。但如果这是家庭作业并且必须以这种方式完成,那就是这样。
  • @TemporalWolf 下次我会这样做。由于我是新来的,我可以检查它,但不会显示我有。

标签: python python-3.x


【解决方案1】:

for i in reversed ( range ( len( myList )-1 ) ): 应该是 for i in reversed ( range ( len( myList ) ) ):

范围默认不包括最后一个数字:range(5) 给出0,1,2,3,4

让它在进行更改时只输出一行:

if myList[i] % current == 0 and myList[i] != current and ( myList[i] / current ).is_integer():
    myList.pop(i)
    print ( myList )

如果您在 if 语句中进行打印,那么只有当它进行更改时才会显示新列表。

【讨论】:

    【解决方案2】:

    您的“for”循环有问题。删除“-1”,你应该没问题,因为范围是包容性的,排斥性的。请注意,在查找范围(2,n)内的素数时,您不必检查 n,只需检查 sqrt(n)。检查此链接。 https://www.quora.com/Why-do-we-first-find-the-prime-numbers-up-to-square-root-of-N-in-segmented-sieve

    【讨论】:

      猜你喜欢
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2016-08-17
      • 1970-01-01
      • 2020-05-15
      • 2016-05-24
      • 2021-11-14
      相关资源
      最近更新 更多