这个问题要求计算第1000个素数。我正试图解决这个问题,但我被困住了。你知道吗
关于如何解决这个问题有一些指导方针。你知道吗
为了帮助你开始,这里是你应该遵循的阶段的大致轮廓 编写代码:
到目前为止我的尝试是这样的
def calculate_thousandth_prime():
j = 0
for i in range(3,int(10e6)):
if i%2 != 0:
counter = 0
for k in range(1, i):
if i%k != 0:
counter += 1
if counter == 0:
print("This candidate is prime")
j += 1
if j == 1001:
print("The number "+str(i)+" is the thousandth prime")
break
return 0
calculate_thousandth_prime()
我的代码被i%k != 0
卡住了。我一定做错什么了。。。有什么帮助吗?你知道吗
你有两个问题:
首先,您正在搜索
for k in range(1, i):
。因为每个数,包括素数,都可以被1整除,所以你找不到素数。尝试搜索range(2, i)
。你知道吗其次,您正在检查
if i%k != 0:
。你应该检查i%k == 0
。如果i
可被任何数k
整除,则该数是而不是素数。你知道吗事实上,我发现了第三个问题:你有一个off-by-one错误。通过初始化
j=0
,代码将找到的第一个素数视为“第零个”素数。代码将输出千和第一个素数,而不是千分之一个素数。你知道吗我所做的更改:
2
步骤以更自然地跳过偶数。你知道吗range(2, i//2)
。除以任何大于i//2
的值将小于2。你知道吗对早期素数来说,埃拉托斯烯的筛分通常是最快的方法。你可以调整它以达到第n个素数。你知道吗
例如:
素数列表除数检查方法可能更容易编写和理解,但速度要慢得多(尽管对于1000个素数来说,这并没有多大区别):
相关问题 更多 >
编程相关推荐