gpt4 book ai didi

Python。欧拉计划 Q35。找到了解决方案,但我不明白为什么其他方法不起作用。

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:02 25 4
gpt4 key购买 nike

def rot_dig(x):
y=''
output=[x]
listing=list(x)
for i in range(1,len(x)):
listing.append(listing[0])
del(listing[0])
for i in listing:
y=y+i
output.append(y)
y=''
return output

import math

def prime_is(x,prime):
for m in prime:
if m<=math.sqrt(x):
if x%m==0:
return False
else:
return True

prime=[2]
for x in range(3,1000000):
if prime_is(x,prime):
prime.append(x)

primestr=[]
for x in prime:
primestr.append(str(x))

sums=0
for x in primestr:
count=0
for y in rot_dig(x):
if y in primestr:
count+=1
if count==len(x):
sums+=1
<b>else:
for y in rot_dig(x):
if y in primestr:
primestr.remove(y)</b>

print sums

当使用粗体代码运行时,解决方案会错过最后的旋转。因此,如果它查看 1193,它包括 1193、3119、9311,但不包括 1931。我花了一段时间试图找出原因,但我不明白。

此后我编辑了代码以使其更快,并通过简单地删除代码块解决了我遇到的问题,但我不明白为什么会发生这种情况,因为肯定该代码块只会在非循环上执行素数。

最佳答案

可能是因为你的外循环是for x in primestr:并且标记的代码从 primestr 中删除项目.你不想改变 primestr以这种方式循环。您可以使用类似 while i < len(primestr) 的循环相反。

其他一些改进是计算 sqrt在循环外;使用列表理解而不是循环来创建 primestr ;尤其是在 rot_dig 中使用字符串切片,它比它需要的要复杂得多。

关于Python。欧拉计划 Q35。找到了解决方案,但我不明白为什么其他方法不起作用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7220565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com