python欧拉Q35项目。找到了解决方案,但我没有';我不明白为什么其他方法不能';不行。 def rot_dig(x): y='' 输出=[x] 列表=列表(x) 对于范围(1,len(x))中的i: append(清单[0]) del(清单[0]) 对于清单中的i: y=y+i 输出追加(y) y='' 返回输出 输入数学 def prime_是(x,prime): 对于素数中的m: 如果m<=math.sqrt(x): 如果x%m==0: 返回错误 其他: 返回真值 素数=[2] 对于范围内的x(31000000): 如果素数_是(x,素数): prime.append(x) primestr=[] 对于素数中的x: primestr.append(str(x)) 总和=0 对于primestr中的x: 计数=0 对于rot_dig(x)中的y: 如果primestr中有y: 计数+=1 如果计数==len(x): 总和+=1 其他: 对于rot_dig(x)中的y: 如果primestr中有y: primestr.移除(y) 打印总和

python欧拉Q35项目。找到了解决方案,但我没有';我不明白为什么其他方法不能';不行。 def rot_dig(x): y='' 输出=[x] 列表=列表(x) 对于范围(1,len(x))中的i: append(清单[0]) del(清单[0]) 对于清单中的i: y=y+i 输出追加(y) y='' 返回输出 输入数学 def prime_是(x,prime): 对于素数中的m: 如果m<=math.sqrt(x): 如果x%m==0: 返回错误 其他: 返回真值 素数=[2] 对于范围内的x(31000000): 如果素数_是(x,素数): prime.append(x) primestr=[] 对于素数中的x: primestr.append(str(x)) 总和=0 对于primestr中的x: 计数=0 对于rot_dig(x)中的y: 如果primestr中有y: 计数+=1 如果计数==len(x): 总和+=1 其他: 对于rot_dig(x)中的y: 如果primestr中有y: primestr.移除(y) 打印总和,python,Python,使用粗体代码运行时,解决方案将错过最终旋转。所以如果看1193年,它包括11933119311,但不包括1931年。我花了一段时间试图找出原因,但我不明白 此后,我编辑了代码,使其更快,并通过简单地删除代码块解决了我遇到的问题,但我不明白为什么会发生这种情况,因为肯定这段代码只会在非循环素数上执行。这可能是因为您的外循环是素数str:中x的,并且标记的代码会从素数str中删除项。您不想在循环时更改primestr。您可以使用类似的循环,而使用i

使用粗体代码运行时,解决方案将错过最终旋转。所以如果看1193年,它包括11933119311,但不包括1931年。我花了一段时间试图找出原因,但我不明白


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

这可能是因为您的外循环是素数str:中x的
,并且标记的代码会从
素数str
中删除项。您不想在循环时更改
primestr
。您可以使用类似
的循环,而使用i

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

PE\35:一百万以下有多少个循环素数?便捷链接:
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
    else:
        for y in rot_dig(x):
            if y in primestr:
                primestr.remove(y)

print sums