Python程序因输入大于3位而失败

Python程序因输入大于3位而失败,python,Python,我正在这样做,我的代码失败,最大值超过999,但在此之前工作正常 “计数”停止在22,不计算任何超过999的素数 import itertools import time def isPrime(n): if n % 2 == 0: return n == 2 d = 3 while d * d <= n: if n % d == 0: return False d += 2 retu

我正在这样做,我的代码失败,最大值超过999,但在此之前工作正常

“计数”停止在22,不计算任何超过999的素数

import itertools
import time

def isPrime(n):
    if n % 2 == 0:
        return n == 2
    d = 3
    while d * d <= n:
        if n % d == 0:
            return False
        d += 2
    return True

t=time.time()
count=0
Range=1000000
for a in range(2,Range):   
    if isPrime(a):
        alist=[]
        perms=[]
        for n in str(a):
            alist.append(n)
        for n in itertools.permutations(alist):
            num=int("".join(n))
            perms.append(num)
        if all(isPrime(l) for l in perms):
            count+=1

print("there are ", count, " circular primes")
print("time=",time.time()-t,"s")
导入itertools
导入时间
def iPrime(n):
如果n%2==0:
返回n==2
d=3

而d*d前四位循环素数是(我想)1193。最简单的故障排除方法就是看看这个数字会发生什么。问题是,
itertools.permutations
生成所有置换,而不是循环旋转。1193的循环旋转为

[1193, 3119, 9311, 1931]
您的代码正在生成一个更大的列表:

[1931, 1913, 1391, 1319, 1193, 1139, 9131, 9113, 9311, 9311, 9113, 9131, 3191, 3119, 3911, 3911, 3119, 3191, 1193, 1139, 1913, 1931, 1319, 1391] 

例如,1391不是素数。

前四位循环素数是(我想)1193。最简单的故障排除方法就是看看这个数字会发生什么。问题是,
itertools.permutations
生成所有置换,而不是循环旋转。1193的循环旋转为

[1193, 3119, 9311, 1931]
您的代码正在生成一个更大的列表:

[1931, 1913, 1391, 1319, 1193, 1139, 9131, 9113, 9311, 9311, 9113, 9131, 3191, 3119, 3911, 3911, 3119, 3191, 1193, 1139, 1913, 1931, 1319, 1391] 

例如,1391不是质数。

您没有看到问题所在。你只需要旋转,而不是所有的排列

这将生成要测试的旋转:

a_str = str(a)
perms = [ int(a_str[i:] + a_str[0:i]) for i in range(1,len(a_str)) ]

你没有读到这个问题。你只需要旋转,而不是所有的排列

这将生成要测试的旋转:

a_str = str(a)
perms = [ int(a_str[i:] + a_str[0:i]) for i in range(1,len(a_str)) ]

定义“失败”?它是否抛出异常,计算错误?那么,您是否也尝试输出素数列表?你怎么知道22是错的?等等……是的,我试过了所有这些,循环素数的wiki给出了很多以上的值。您可能内存不足,请尝试从
range()
切换到
xrange()
,因为后者占用的空间更少。还可以使用
itertools
查看下面的其他答案,以获得更好的问题解决方案。定义“失败”?它是否抛出异常,计算错误?那么,您是否也尝试输出素数列表?你怎么知道22是错的?等等……是的,我试过了所有这些,循环素数的wiki给出了很多以上的值。您可能内存不足,请尝试从
range()
切换到
xrange()
,因为后者占用的空间更少。另外,请查看下面的其他答案,以便使用
itertools
更好地解决此问题。啊,就是这样,我认为这是一个愚蠢的错误,谢谢!啊,就是这样,我觉得这是个愚蠢的错误,谢谢!