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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM