回文质数
因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151是回文质数。请写一个程序来找出范围[a,b] (5≤a≤b≤100000)间的所有回文质数。
Input
只有一行,为两个整数,依次代表a,b 。
Output
每个回文质数输出一行。测试用例保证输入合法且输出至少包含一个回文质数。
Sample Input Copy
100 200
Sample Output Copy
101 131 151 181 191 直接上代码
str_a=[0]
str_b=[]
a,b=map(int,input().split())
if(a>=5 and a<=b and b<=100000):
for i in range(a,10):
flag3=0
for j in range(2,i):
if(i%j==0):
flag3=1
break
if(flag3==0):
str_b.append(i)
for num in range(a,b):
i=num
str_a=[0]
flag=0
flag2=0
count=0
if(int(i/10)>0):
while i>0 :
str_a.append(i%10)
i=int(i/10)
count=count+1
c=int(count/2+1)
for j in range(1,c+1):
if str_a[j]!=str_a[count-j+1]:
flag=1
break
if flag==0:
for i in range(2,num):
if(num%i==0):
flag2=1
break
if flag2==0:
str_b.append(num)
for i in range(0,len(str_b)):
print(str_b[i])
上面这个写的有点繁琐,想到另外一种实现方式复杂度较低
from math import *
z=[5,7,11]
x=[int(i) for i in input().split()]
for i in range(1,10,2):
for j in range(0,10):
for k in range(0,10):
a=i*10000+j*1000+k*100+j*10+i
for m in range(3, round(sqrt(a)) + 1):
if a % m == 0:
break
else:
z.append(a)
for i in range(1,10,2):
for j in range(0,10):
a=i*100+j*10+i
for k in range(3,round(sqrt(a))+1):
if a%k==0:
break
else:
z.append(a)
for i in range(1,10,2):
for j in range(0,10):
for k in range(0,10):
for l in range(0,10):
a=1000000*i+j*100000+k*10000+l*1000+k*100+j*10+i
for m in range(3, round(sqrt(a)) + 1):
if a % m == 0:
break
else:
z.append(a)
z.sort()
for i in z:
if x[0]<=i<=x[1]:
print(i)