回文质数

回文质数

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值