[题目描述]
找出正整数 M 和 N 之间(N 不小于 M)的所有真素数。
真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为真素数。
例如,11,13 均为真素数,因为 11 的反序还是为 11,13 的反序为 31 也为素数。
输入:
输入两个数 M 和 N,空格间隔。
输出:
按从小到大输出 M 和 N 之间(包括 M 和 N)的真素数,逗号间隔。如果之间没有真素数,则输出 No。
样例输入1
10 35
样例输出1
11,13,17,31
提示:
1≤M≤N≤100000
来源/分类(难度系数:一星)
完整代码展示:
a,b=map(int,input().split())
c=[]
for i in range(a,b+1):
l=2
m=int(pow(i,0.5))
while l<=m:
if i%l==0:
break
l+=1
if l>m and i>=2:
d=list(str(i))
d.reverse()
sum=""
for j in range(0,len(d)):
sum+=d[j]
sum=eval(sum)
x=2
y=int(pow(sum,0.5))
while x<=y:
if sum%x==0:
break
x+=1
if x>y:
c.append(i)
if len(c)==0:
print("No")
else:
for k in range(0,len(c)-1):
print(c[k],end=",")
print(c[-1])
代码解释:
“a,b=map(int,input().split())
c=[] ”,让用户输入限定求解区间的两个数值a,b。建立一个空列表c。
“for i in range(a,b+1):
l=2
m=int(pow(i,0.5))
while l<=m:
if i%l==0:
break
l+=1 ”,根据素数(质数)的定义,遍历a到b区间内的所有数值,查找符合条件的数值。
“ if l>m and i>=2:
d=list(str(i))
d.reverse()
sum=""
for j in range(0,len(d)):
sum+=d[j]
sum=eval(sum)
x=2
y=int(pow(sum,0.5))
while x<=y:
if sum%x==0:
break
x+=1
if x>y:
c.append(i) ”,如果该数值为质数,则将它转换为字符串并储存进列表d中。接着反转列表d,建立一个空字符串sum,让sum从左到右依次连接列表d中所有元素组成新的字符串sum。连接完成后,将新的字符串sum由字符串转换为可计算的数值,并按照质数的定义判断其是否为质数。如果是,则将其添加进列表c中。
“if len(c)==0:
print("No")
else:
for k in range(0,len(c)-1):
print(c[k],end=",")
print(c[-1]) ”,遍历结束后,判断列表c是否为空。如果是,则输出”No”;否则遍历列表c,从左至右依次打印列表c中所有元素,每两个元素之间插入一个逗号(末尾不插入)。
运行效果展示:
(声明:以上内容均为原创)