在Python中查找总素数(进程被终止错误)

在Python中查找总素数(进程被终止错误),python,algorithm,optimization,numbers,primes,Python,Algorithm,Optimization,Numbers,Primes,这是我正在解决的问题 数字23是唯一的,因为它的所有数字都是素数。此外,它本身就是一个素数。10到100之间有4个这样的数字:23、37、53、73。让我们称这些数字为“总素数” 完成函数,该函数接受一个范围[a,b),并返回该范围内的总素数(a4#[23,37,53,73] (500600)==>3#[5235757577] 我尝试解决如下问题(它返回样本测试的正确数字): def isPrime(n): 如果n

这是我正在解决的问题

数字23是唯一的,因为它的所有数字都是素数。此外,它本身就是一个素数。10到100之间有4个这样的数字:23、37、53、73。让我们称这些数字为“总素数”

完成函数,该函数接受一个范围
[a,b)
,并返回该范围内的总素数(
a4#[23,37,53,73]
(500600)==>3#[5235757577]

我尝试解决如下问题(它返回样本测试的正确数字):

def isPrime(n):
如果n<2:返回False
对于范围(2,int(n**0.5)+1)内的x:
如果n%x==0:
返回错误
返回真值
数字(n):
对于集合中的i(str(n)):
如果不是iPrime(int(i)):
返回错误
返回真值
def获取总素数(a,b):
计数=0
对于(a,b)范围内的i:
如果(i)及其数字(i)):
计数+=1
返回计数
但是Codewars给了我一个错误:

进程已终止。完成此进程所用的时间超过12000ms

我们的服务器配置为只允许在一定时间内 您要执行的代码。在极少数情况下,服务器可能也会执行 需要做大量工作,但无法足够有效地运行代码。 大多数情况下,虽然这个问题是由效率低下引起的 算法。如果您多次看到此错误,您应该尝试 进一步优化代码


你能帮我优化我的代码吗?

正如评论中所建议的,也许正确的方法是先从素数生成数字,然后检查这些数字是否为素数?你可以使用生成器表达式轻松生成给定长度的{2,3,5,7}的所有可能组合,如下所示:

def prime_digit_combinations(length):
    if length <= 0:
        return [0]
    return ((10 ** (length - 1)) * current + rest
            for current in [2, 3, 5, 7]
            for rest in prime_digit_combinations(length - 1))
def基本数字组合(长度):

如果长度有简单的改进:使用更快的素性测试(有吨),并存储您已经看到的内容的结果。不过,这个问题太广泛了。不需要使用非素数数字生成数字。您需要使用一些数学和数据结构。例如,您检查了多少次8是否为素数?为什么?您知道素数,
{2,3,5,7}
,为什么要循环检查所有数字?一旦检查出某个数字是素数,就将其放入字典或集合中,以便下次检查更快,等等。
def prime_digit_combinations(length):
    if length <= 0:
        return [0]
    return ((10 ** (length - 1)) * current + rest
            for current in [2, 3, 5, 7]
            for rest in prime_digit_combinations(length - 1))
def get_possible_total_primes(a, b):
    result = []
    for length in range(len(str(a)), len(str(b)) + 1):
        result.extend(
            num for num in prime_digit_combinations(length)
            if a <= num <= b
        )
    return result