Python程序查找素数(3.5)

时间:2016-12-01 21:18:29

标签: python python-3.x

我正在制作一个找到素数的程序。要求用户提供大于2(n)的程序,然后从2开始并以用户的号码(n)结束。在我的程序中,我应该将一个名为current的变量设置为2,然后在列表中循环查找当前的倍数并删除它们。在循环结束时,我将1添加到当前,程序循环再次执行与之前相同的操作。每次打印清单。我的程序正常工作(我正在测试使用数字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

2 个答案:

答案 0 :(得分:4)

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语句中进行打印,那么只有在进行更改时才会显示新列表。

答案 1 :(得分:0)

你的&#34; for&#34;循环有问题。删除&#34; -1&#34;你应该没问题,因为范围是包容性的,独家的。只需注意,当查找范围(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