题目
题目描述
蒜头君请你帮忙找出正整数 M M M 和 N N N 之间( N N N 不小于 M M M)的所有真素数。
真素数的定义:如果一个正整数 P P P 为素数,且其反序也为素数,那么 P P P 就为真素数。
例如, 11 11 11, 13 13 13 均为真素数,因为 11 11 11 的反序还是为 11 11 11, 13 13 13 的反序为 31 31 31 也为素数。
输入格式
输入两个数 M M M 和 N N N,空格间隔, 1 ≤ M ≤ N ≤ 100000 1≤M≤N≤100000 1≤M≤N≤100000。
输出格式
按从小到大输出
M
M
M和
N
N
N之间(包括
M
M
M和
N
N
N)的真素数,逗号间隔。如果之间没有真素数,则输出No
。
样例输入
10 35
样例输出
11,13,17,31
解题
思路分析
- 首先要找到区间内的所有素数
- 素数只能被
1
和其本身整除。
- 素数只能被
- 然后判断该素数反过来的值,是否也是素数
- 反过来可以将数字转换为字符串来操作
Python
可以用[::-1]
Java
可以用reverse()
- 然后再转换为数值形式进行判断是否是素数
所以这道题的关键之处就在于素数的判断,我之前写过一篇博客讲过素数判断的方法。CSDN :判断质数(素数) Python
代码实现
def iszs(n):
if n <= 3:
return n >= 2
if (n + 1) % 6 != 0 and (n - 1) % 6 != 0:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
m, n = map(int, input().split())
ans = ''
for i in range(m, n + 1):
if iszs(i) and iszs(int(str(i)[::-1])):
ans += str(i) + ',' # 按要求将答案存入字符串,以','分隔
if len(ans)==0: # 如果没有符合条件的数出现,则输出'No'
print('No')
else:
print(ans.strip(',')) # 消去末尾的','