一直卡在33分其它全TLE超时了QAQ
查看原帖
一直卡在33分其它全TLE超时了QAQ
749028
QAQ5楼主2024/7/18 09:11
# 是质数?
def isPrime(n):
    if n%2 == 0:
        return False
    for left in range(3,n,2):
        if n % left == 0:
            return False
    return True
# 产生回文数组,不包括偶数长度数和个位数
def palindrome(n):
    result = []
    max = 10**int(n/2)
    left = int(max/10)
    while left < max:
        strLeft = str(left)
        mid = 0
        while mid < 10:
            result.append(strLeft+str(mid)+strLeft[::-1])
            mid+=1
        left+=1
    return result
# 以左值生成回文数,不包括偶数长度数和个位数
def leftPalindrome(Left):
    result = []
    bl = int(l/2)
    max = 10**bl
    strLeft = Left[:bl]
    strRevLeft = strLeft[::-1]
    revLeft = int(strRevLeft)
    left = int(strLeft)
    right = int(Left[bl+1:])
    mid = int(Left[bl])
    if revLeft < right:
        mid+=1
    while mid < 10:
        result.append(strLeft+str(mid)+strRevLeft)
        mid+=1
    left+=1
    while left < max:
        strLeft = str(left)
        mid = 0
        while mid < 10:
            result.append(strLeft+str(mid)+strLeft[::-1])
            mid+=1
        left+=1
    return result
# 以右值生成回文数,不包括偶数长度数和个位数
def rightPalindrome(Right):
    result = []
    max = 10**int(len(Right)/2)
    left = int(max/10)
    while left < max:
        strLeft = str(left)
        mid = 0
        while mid < 10:
            r = strLeft+str(mid)+strLeft[::-1]
            if int(r) > int(Right):
                return result
            result.append(r)
            mid+=1
        left+=1
    return result
userStr = input()
two = userStr.split(' ')
min = two[0]
max = two[1]
allP = []
l = len(min)
l2 = len(max)
# 不考虑两个数位数相等的情况,也不考虑左边比右边大的情况
if l%2 != 0:
    if l == 1:
        allP+=list(range(int(min),10))
        if l2 != l+1:
            allP.append(11)
    else:
        allP += leftPalindrome(min)
    for l in range(len(min)+2,len(max),2):
        allP+=palindrome(l)
else:
    if l == 2 and min <= 11:
        allP.append(11)
    for l in range(len(min)+1,len(max),2):
        allP+=palindrome(l)
if l2%2 != 0:
    allP += rightPalindrome(max)
for p in allP:
    if isPrime(int(p)):
        print(p)
# 每次都是立刻开始显示结果但输出速度慢,难道可能只是优化一下判断质数的就行了
# 还是不行,只能想到两种情况,思路是对的但机器算法要优化,思路是错的因为可以直接生成而不是生成后判断,或者其它莫名其妙匪夷所思只能猜不能想但肯定简单得很的方法?最后是错的又做不出来就算再简单也做不出来
2024/7/18 09:11
加载中...