若整数从左向右读与从右向左读是相同的数,且其为素数,则称其为回文素数。所谓素数是指只能由1和它本身整(1.0除的整数。
对于偶数位的整数,只有11是回文素数。也就是说,除了11之外,所有的两位数都不是回文素数。所有的4位整数、6位整数、8位整数中也不存在回文素数。
但是三位回文素数有很多,比如:101、131等。
请用程序实现
输入一个三位数num ,找出10~num(含)中的所有回文素数,并输出。
示例 1
输入
140
输出
11
101
131
示例 2
输入
160
输出
11
101
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def is_huiwen(n):
return str(n) == str(n)[::-1]
num = int(input())
for i in range(10, num+1):
if is_prime(i) and is_huiwen(i):
print(i)
程序代码:
from random import sample
print("游戏开始啦!")
fox =sample(range(5),1)
a = int("".join(list(map(str, fox))))
print(a)
while 1:
x = int(input("请输入你选择的洞口:"))
if x != a:
print("错啦!明天再来吧!")
print("第二天啦!")
if a < 4:
a += 1
if a == 4:
a -= 1
print()
continue
if x == a:
print("抓到狐狸啦!")
exit(0)
运行结果:
C:\ProgramData\Anaconda3\python.exe D:/blue3/04.py
游戏开始啦!
0
请输入你选择的洞口:1
错啦!明天再来吧!
第二天啦!
请输入你选择的洞口:2
错啦!明天再来吧!
第二天啦!
请输入你选择的洞口:3
错啦!明天再来吧!
第二天啦!
请输入你选择的洞口:4
错啦!明天再来吧!
第二天啦!
请输入你选择的洞口:2
错啦!明天再来吧!
第二天啦!
请输入你选择的洞口:3
抓到狐狸啦!
进程已结束,退出代码0
优化后的冒泡排序算法如下:
def bubble_sort(nums): n = len(nums) # 遍历列表中的所有元素 for i in range(n): # 标记当前轮是否进行了交换 flag = False # 遍历未排序部分的所有元素 for j in range(n-i-1): # 如果前一个元素比后一个元素大,进行交换 if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] flag = True # 如果本轮没有进行交换,则已经完成排序 if not flag: break # 返回排序后的列表 return nums
print(bubble_sort([3, 1, 5, 7, 2, 4, 6]))
优化思路:在传统冒泡排序的基础上增加了一个标记,用于记录本轮操作是否有数据交换,若无,则表明列表已经有序,可以直接结束循环,避免不必要的比较操作。这样可以优化时间复杂度,尤其是在数据量较大的情况下。
这个你首先得到素数,再判断是否回文就可以了。
def is_prime(num):
"""
判断一个数是否为素数
"""
if num < 2:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
def is_palindrome(num):
"""
判断一个数是否为回文数
"""
num_str = str(num)
return num_str == num_str[::-1]
def find_palindrome_primes(num):
"""
找出10~num(含)中的所有回文素数,并输出
"""
for i in range(10, num+1):
if is_palindrome(i) and is_prime(i):
print(i)
# 测试
find_palindrome_primes(999)