xingkongyuan @ 2023-12-05 18:12:35
#用的python语言
lis = input().split()
lis = [int(x) for x in lis]
a = lis[0]
b = lis[1]
liss=[]
for i in range(a,b):
if str(i)[-1] == '2' or str(i)[-1] == '4' or str(i)[-1] == '6' or str(i)[-1] == '8' or str(i)[-1] == '0':#筛除所有尾数偶数的数字
continue
if len(str(i)) % 2 == 0 and i != 11:#筛出所有数字的位数是偶数的回文数(因为除了11以外的回文数都不是质数,因为可以整除11)
continue
for j in range(1,len(str(i))):#判断是否为回文数
if str(i)[j - 1] != str(i)[-j]:
break
else:
liss += [i]
for i in liss:
for k in range(2,i):#判断是否为质数
if i % k == 0 :
break
else:
print(i)
by renliantao @ 2023-12-22 20:34:57
for k in range(2,i):#判断是否为质数,这句是超时的主要原因,你不需要挨个的拿那些数去试,只需要拿3.5.7.11.13....这些质数去测试,最大的回文数是9999999,它的平方根是3162,所以你先求出 3162之内的质数,才446个,然后用这些质数去试就行了,节省好几个数量级。 回文数不要去用if语句,用for循环枚举即可,很快,就几千个回文数,产生回文数的时候,拿那446个质数去试试就行了。