Python之回文质数

回文质数

因为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


直接上代码


 1 str_a=[0]
 2 str_b=[]
 3 a,b=map(int,input().split())
 4 if(a>=5 and a<=b and b<=100000):
 5     for i in range(a,10):
 6         flag3=0
 7         for j in range(2,i):
 8             if(i%j==0):
 9                 flag3=1
10                 break
11         if(flag3==0):
12             str_b.append(i)
13     for num in range(a,b):
14         i=num
15         str_a=[0]
16         flag=0
17         flag2=0
18         count=0
19         if(int(i/10)>0):
20             while i>0 :
21                 str_a.append(i%10)
22                 i=int(i/10)
23                 count=count+1
24             c=int(count/2+1)
25             for j in range(1,c+1):
26                 if str_a[j]!=str_a[count-j+1]:
27                     flag=1
28                     break
29             if flag==0:
30                 for i in range(2,num):
31                     if(num%i==0):
32                         flag2=1
33                         break
34                 if flag2==0:
35                     str_b.append(num)
36     for i in range(0,len(str_b)):
37         print(str_b[i])
38                     
39  
上面这个写的有点繁琐,想到另外一种实现方式复杂度较低

 1 from math import *
 2 z=[5,7,11]
 3 x=[int(i) for i in input().split()]
 4 for i in range(1,10,2):
 5     for j in range(0,10):
 6         for k in range(0,10):
 7             a=i*10000+j*1000+k*100+j*10+i
 8             for m in range(3, round(sqrt(a)) + 1):
 9                 if a % m == 0:
10                     break
11             else:
12                 z.append(a)
13 for i in range(1,10,2):
14     for j in range(0,10):
15         a=i*100+j*10+i
16         for k in range(3,round(sqrt(a))+1):
17             if a%k==0:
18                 break
19         else:
20             z.append(a)
21 for i in range(1,10,2):
22     for j in range(0,10):
23         for k in range(0,10):
24             for l in range(0,10):
25                 a=1000000*i+j*100000+k*10000+l*1000+k*100+j*10+i
26                 for m in range(3, round(sqrt(a)) + 1):
27                     if a % m == 0:
28                         break
29                 else:
30                     z.append(a)
31 z.sort()
32 for i in z:
33     if x[0]<=i<=x[1]:
34         print(i)
 

猜你喜欢

转载自www.cnblogs.com/dbhong/p/11711566.html