用于查找第1001个素数的Python代码

时间:2018-02-03 14:43:17

标签: python primes

我最近开始编程Python,并且因为找到第1001个素数而陷入了这个特殊的Project Euler问题。 我的代码:

L = [2]
def is_prime(x,L):
    for el in L:
        if x%el != 0:
            flag = 1
        else:
            flag = 0
            break    
    if flag == 1:
        return True
    elif flag == 0:
        return False

a = 3
for k in range(1,1002):
    if is_prime(a,L) is True:
        L.append(a)
        a += 1
        k += 1
    else:
        a += 1
print(L)
print(len(L))

这将打印素数列表,最多为997,这是第168个素数。你能告诉我我做错了什么吗?

4 个答案:

答案 0 :(得分:2)

k的增量是没有意义的,因为你重复固定的数字范围(k在循环循环时被替换,range无法替换动态改变。)

您希望while循环使用手动管理的k

a = 3
k = 1
while k < 1002:
    if is_prime(a,L):
        L.append(a)
        a += 1
        k += 1
    else:
        a += 1

注意:这里可能存在一些一对一的逻辑错误,但它表达了我在原始代码中的意图,仅修复了管理k的问题。

答案 1 :(得分:2)

k + = 1

这就是问题所在。试试这段代码:

for k in range(1, 1002):
    print(k)

然后:

for k in range(1, 1002):
    k += 1
    print(k)

答案 2 :(得分:-1)

你的错误是你发现的数字是100到100的主要值而且循环的变量也不能增加用户 修复使用while循环

答案 3 :(得分:-2)

要找到Prime给任何数字的程序将是:

import sys
def prime_num_finder():
    i = 2
    while True:
        try:
            p = int(input("Please enter up to what number the prime numbers should be: "))
            break
        except ValueError:
            sys.stderr.write('ERROR\n')
            sys.stderr.write(' Try again...\n')
    while  i != (p + 1):
        x = i

        if x % 2 and  x % 3 and x % 5 and x % 7 > 0.1: # Checks if the remainder is greater than 0.1 to see if it has an remainder
            r1 = True

        else:
            if i == 2 or i == 3 or i == 5 or i == 7:
                r1 = True        
            else:
                r1 = False
        if r1 == True:
            print(i, " is a prime number!")
        else:
            pass
        i = i + 1

prime_num_finder()
quit()

这是一个简单的程序来检查它是否可以被2,3,5或7

整除