当前位置: 首页 > news >正文

老题新解|素数回文数的个数

《信息学奥赛一本通》第135题:素数回文数的个数

题目描述
111111nnn 之间(包括 nnn),既是素数又是回文数的整数有多少个。
输入格式
一个大于 111111 小于 100001000010000 的整数 nnn
输出格式
111111nnn 之间的素数回文数个数。
输入输出样例 #1
输入 #1
23
输出 #1
1
说明/提示
回文数指左右对称的数,如:111111121211212112121

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 135 题:素数回文数的个数。

image.png

一、题目描述

洛谷的题号是:B2136 素数回文数的个数

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 135 题。

根据输入格式的描述,输入一个大于 11 小于 10000 的整数 n,所以使用 int 类型。

int n;
cin>>n;

输入完成后,我们来分析题意,根据题目意思,我们要找 11 到 n 之间素数回文数的个数。

所以需要使用 for 循环从 11 遍历到 n,可以使用函数来判断这个数是否为素数并且是回文数,我们可以使用函数来完成这两个功能。

for(int i=11;i<=n;i++)
{if(pdss(i)==true&&hws(i)==true){}
}

如果是素数并且是回文数,则进行累加统计,定义一个累加变量,初始值为 0。

int cnt=0;
for(int i=11;i<=n;i++)
{if(pdss(i)==true&&hws(i)==true){cnt++;}
}

只需要输出 cnt 即可。

cout<<cnt;

我们来完成判断素数的函数,利用素数的性质来实现。

#include<cmath>
bool pdss(int k)
{if(k==1){return false;//1不是素数}else{//在除1和本身以外找因数for(int i=2;i<=sqrt(k);i++){if(k%i==0)//能整除{return false;//不是素数}}return true;//是素数}
}

接下来完成回文数的判断,回文数就是前后读都一样,所以我们需要将数值拆分,并且计算出倒序的值,判断参数是否和倒序的值是否一致,如果一致,则返回 true,否则返回 false。

bool hws(int p)
{int sum=0;//求p的倒序的值 初始值为0while(p!=0)//拆分p{sum=sum*10+p%10;//倒序p/=10;//缩小p}if(sum==p){return true;}else{return false;}
}

将函数添加到主函数之前,按照样例输入对数据进行验证。

image.png

结果不正确,验证一下,可以输出 hws(11),发现是回文数函数出错了,检查代码,发现是 p 和 sum 比较,这是错误的,因为 p 最终的结果是 0,所以我们应该提前将 p 的值提取出来,修正代码,利用新变量 g 和 sum 比较即可。

bool hws(int p)
{int g=p;int sum=0;//求p的倒序的值 初始值为0while(p!=0)//拆分p{sum=sum*10+p%10;//倒序p/=10;//缩小p}if(sum==g){return true;}else{return false;}
}

按样例再次测试。

image.png

符合样例输出,到网站提交测评。

image.png

测试通过!

三、完整代码

该题的完整代码如下:

#include<cmath>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
bool hws(int p)
{int g=p;int sum=0;//求p的倒序的值 初始值为0while(p!=0)//拆分p{sum=sum*10+p%10;//倒序p/=10;//缩小p}if(sum==g){return true;}else{return false;}
}
bool pdss(int k)
{if(k==1){return false;//1不是素数}else{//在除1和本身以外找因数for(int i=2;i<=sqrt(k);i++){if(k%i==0)//能整除{return false;//不是素数}}return true;//是素数}
}
int main()
{int n;cin>>n;int cnt=0;for(int i=11;i<=n;i++){if(pdss(i)==true&&hws(i)==true){cnt++;}}cout<<cnt;return 0;
}

四、总结

本题考察了素数判断与回文数判断,主要知识点如下:

1、知识点总结

(1)素数判断:利用从 2 到 √n 循环判断是否能整除即可。

(2)回文数判断:将数字倒序后与原数字比较是否相等。
(3)循环统计:使用 for 循环遍历范围 [11, n],对每个数进行判断并计数。

(4)函数封装:素数判断和回文判断分别封装为函数,增强代码可读性和复用性。

2、常见易错点:

(1)回文数判断时,直接比较循环过程中修改后的变量 p 与倒序值 sum,容易出错,应提前保存原值。

(2)素数判断时,循环上限最好取 √k,提高效率。

(3)计数时要确保循环范围从 11 开始,包括 n,否则可能漏掉边界值。

3、解题建议

本题适合练习函数封装与条件判断的结合,逻辑清晰,先判断素数,再判断回文数。对范围较大的 n,素数判断可优化为开平方,提高效率。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

http://www.dtcms.com/a/408394.html

相关文章:

  • 东莞市网站seowordpress音乐站源码
  • 模板网站制作多少钱推广普通话宣传周
  • MySQL-多版本并发控制
  • 防火墙(1)了解防火墙
  • 做后期哪个网站素材好网站作品怎么做链接
  • 制冷机电工程东莞网站建设网站建设服务市场细分
  • 美食网站开发现状设计页面ui
  • 做PPT哪个网站的素材多点晋江网站建设企业
  • 邯郸网站建设网页设计网络推广宁波城乡住房建设局网站
  • 广州天河建站公司鲜花网站开发背景
  • LeetCode 102. 二叉树的层序遍历
  • 网站建设风景课程设计报告网店设计风格怎么写
  • 做网站被网警找六感程序网站建设
  • 网站建设制作官网哈尔滨cms模板建站
  • 数据分析师资源合集
  • 静态网站怎么建设广告网站建设制作设计服务商
  • 网站建设及政务公开工作总结中文旅游网站模板下载
  • docker-镜像
  • 常用外贸网站网站死链检测
  • 沈阳餐饮网站建设建设厅和住建厅有什么区别
  • 网站 app 哪个先做六安百度公司六安百度推广
  • 做外贸阿里巴巴有哪些网站大兴企业官方网站建设
  • 济南商务网站建设站长之家是什么
  • 网站模板之家官网制做网站首先应该怎么做
  • 有专业制作网站的公司吗郑州短视频运营
  • 做静态网站步骤浙江建站
  • 鲜花网站模板网站的内容和功能
  • 虚拟原型技术深度剖析:从基础原理到实战应用的全景指南
  • 网站一般用什么软件做的灰色行业推广渠道
  • 个人做的小网站需要备案个人公积金查询app下载