繁体   English   中英

Python程序查找素数(3.5)

[英]Python program to find prime numbers (3.5)

我正在编写一个查找素数的程序。 要求用户提供一个大于2(n)的数字,然后程序列出从2开始并以用户的数字(n)结尾的列表。 在我的程序中,我应该将一个称为current的变量设置为2,然后遍历列表以查找current的倍数并将其删除。 在循环结束时,我将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

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

默认情况下,range不包含最后一个数字: 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语句中进行打印,则只有在进行更改时才会显示新列表。

您的“ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM