回文質數
因為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)