100个python算法超详细讲解:回文素数

【100个python算法超详细讲解@谷哥技术

1.问题描述
本节要研究回文素数的问题,先来看看什么是回文素数。
所谓回文素数指的是,对一个整数n从左向右和从右向左读其数值都相同且n为
素数,则称整数n为回文素数。
对于偶数位的整数,除了11以外,都不存在回文素数。即所有的4位整数、6位
整数、8位整数等都不存在回文素数。下面列出两位和三位整数中包含的所有回文素
数。
两位回文素数:11。
三位回文素数:101,131,151,181,191,313,353,373,383,727,757,
787,797,919,929。
本节要求解的问题是:求出所有不超过1000的回文素数。
2.问题分析
本题仍旧要使用判断素数的方法。判断素数的方法读者已经比较熟悉了,因此
本题实际要解决的问题在于如何求一个整数的回文数。
我们采用的方法是穷举法。对1000以内的每一个整数n进行考察,判断n是否为
回文数。如果n是回文数,再判断它是否为素数,对于既是回文数也是素数的整数n
就是我们要求的回文素数,将其打印输出即可。
由于题目要求解的是所有不超过1000的回文素数,因此最后的结果中应该包含
两位和三位的回文数。
我们采用穷举法来构造一个整数并求与其对应的反序数,若整数与其反序数相
等,则该整数是回文数。
3.算法设计
在问题分析中我们已经确定要采用穷举法逐一考查1000以内的每个整数,因此
本题的算法设计可以采用循环结构来完成。
通过三重循环来遍历所有1000以内的整数。用3个循环变量来构造整数n,同
时,这3个循环变量反序便可以构造出n的反序数m。其中,特别要注意的是如果n的
个位为0,接下来要做的就是比较m和n的值是否相等,如果相等则表明整数m是回
文数。再来判断n是否是素数,如果n也同时为素数,则n为回文素数,将其打印出来
即可。
4.确定程序框架
程序的流程图如图5.9所示。

 5.完整的程序
根据上面的分析,编写程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 回文素数
# 判断参数n是否为素数
def fun(n):
for i in range(2, (n-1)//2):
if n % i == 0: # 偶数不是素数
return 0
return 1 # 返回1是素数
if __name__=="__main__":
print("1000以内的回文素数:")
for i in range(0, 9+1): # 穷举第一位
for j in range(0, 9+1): # 穷举第二位
穷举第 位
for k in range(0, 9+1): # 穷举第三位
n = i * 100 + j * 10 + k # 计算组成的整数
m = i + j * 10 + k * 100 # 计算对应的反序数
if i == 0 and j == 0: # 处理整数的前两位为0的情况
m = m // 100
elif i == 0: # 处理整数的第一位为0的情况
m = m // 10
if n > 10 and n == m and fun(n): # 若大于10且为回文数则输出
print("%d\t" %n, end="")

6.运行结果
在PyCharm下运行程序,结果如图5.10所示。

7.拓展训练
考虑是否有其他方法可以判断一个整数是否为回文素数。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee达森

创作不易,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值