我最近开始编程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个素数。你能告诉我我做错了什么吗?
答案 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
整除