回文素数
类型:函数
描述
回文素数是指一个数既是素数又是回文数。例如,131,既是素数又是回文数。 用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔。
输入格式
输入一个正整数
输出格式
符合要求的回文素数
示例
输入:10
输出:2 3 5 7 11 101 131 151 181 191
标准答案
def is_prime(n):
"""判断素数的函数,接收一个正整数为参数,参数是素数时返回True,否则返回False
减小判定区间,减少循环次数,提升效率。
"""
if n < 2:
return False # 0、1、负数以及偶数都不是素数
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0: # 能被2到其根号n之间的整数整除的数不是素数
return False
else:
return True # for循环正常结束,未遇到return的数是素数
def palindromic(num):
"""接收一个数字为参数,判定其是否为回文数,返回布尔值。"""
if str(num) == str(num)[::-1]:
return True
else:
return False
def output_prime(num):
"""接收一个正整数num为参数,在一行中从小到大输出前num个回文素数。
函数无返回值
"""
i = 2 # 从最小的素数2开始测试
count = 0 # 计数器置0
while True: # 无限循环
if palindromic(i) and is_prime(i): # 先判断回文再判断素数,效率高
print(i, end=' ') # i为回文素数时输出i,输出后不换行
count = count + 1 # 每发现一个回文素数计数增加1
if count == num: # 如果找到回文素数数量与要求数量相同时
break # 结束循环
i = i + 1 # 测试下一个数字
if __name__ == "__main__":
n = int(input())
output_prime(n)
我的答案
def isprime(n):
if n<2:
return False
for i in range(2,int(n**0.5)+1):
if n%i == 0:
return False
else:
return True
def ispal(n):
if str(n) == str(n)[::-1]:
return True
else:
return False
n = int(input())
num,a = 2,0
while a<n:
if ispal(num) and isprime(num) :
print(num,end=' ')
a += 1
num += 1