【题目链接】

OpenJudge NOI 1.13 11:回文素数

【题目考点】

1. 函数

2. 质数

3. 回文数

【解题思路】

输入的数字n可以达到9位数字,枚举判断每个数字是否是回文数与质数,复杂度会过高。
可以先构造出n位数字所有可能的回文数,以下有两种构造回文数字的方法:
方法1:对于一个任意的x位数字,将x的倒序数字接在原数字x的后面,就可以构造出一个2x位的回文数。

例:数字123可以构造出123321。数字56可以构造出5665

方法2:将x的倒序数字接在原数字x的后面,并重合一位数字,就可以构造出一个2x-1位的回文数。

例:数字123可以构造出12321。数字56可以构造出565
反过来想,一个n位的回文数字,
如果n是偶数,那么遍历所有n2\frac{n}{2}2n​位的整数,用方法1可以构造出所有n位的回文数。
如果n是奇数,那么遍历所有n+12\frac{n+1}{2}2n+1​位的整数,用方法2可以构造出所有n位的回文数。

构造出所有n位数字的回文数,依次判断每个回文数字是否是质数,如果是,则将数字填充到数组中。
最后输出数组长度及数组的内容。(这一步可以使用vector)

【题解代码】

解法1:填充数组

#include<bits/stdc++.h>
using namespace std;
#define N 100005
int rev(int x)//得到x的逆序数字
{int num = 0;//y:x的逆序数字 for(int a = x; a > 0; a /= 10)num = num*10+a%10;return num;
}
bool isPrime(int n)//判断n是否是质数
{if(n < 2)return false;for(int i = 2; i <= sqrt(n); ++i){if(n%i == 0)return false;}return true;
}
int main()
{int n, d, x, y, num, mi, mx;//d:用于构造回文数的原数字位数 int a[N], ai = 0;//a:保存既是回文数又是质数的数字 ai:数字个数 cin >> n;if(n%2 == 0)d = n/2;elsed = (n+1)/2;mi = pow(10, d-1);//d位数最小值,为10^{d-1}mx = 10*mi;//d位数最大值+1,为10^d for(x = mi; x < mx; ++x)//x:用于构造回文数的原数字 {y = rev(x);//y:x是逆序数字if(n%2 == 0)num = x*mx+y;//构造2d位的回文数:x*10^d+yelsenum = x/10*mx+y;//构造2d-1位的回文数:x/10*10^d+yif(isPrime(num))a[++ai] = num;}cout << ai << endl;for(int i = 1; i <= ai; ++i)cout << a[i] << ' ';return 0;
}

解法2:使用vector

#include<bits/stdc++.h>
using namespace std;
int rev(int x)//得到x的逆序数字
{int num = 0;//y:x的逆序数字 for(int a = x; a > 0; a /= 10)num = num*10+a%10;return num;
}
bool isPrime(int n)//判断n是否是质数
{if(n < 2)return false;for(int i = 2; i <= sqrt(n); ++i){if(n%i == 0)return false;}return true;
}
int main()
{int n, d, x, y, num, mi, mx;//d:用于构造回文数的原数字位数 vector<int> vec;//保存既是质数又是回文数的数字 cin >> n;if(n%2 == 0)d = n/2;elsed = (n+1)/2;mi = pow(10, d-1);//d位数最小值,为10^{d-1}mx = 10*mi;//d位数最大值+1,为10^d for(x = mi; x < mx; ++x)//x:用于构造回文数的原数字 {y = rev(x);//y:x是逆序数字if(n%2 == 0)num = x*mx+y;//构造2d位的回文数:x*10^d+yelsenum = x/10*mx+y;//构造2d-1位的回文数:x/10*10^d+yif(isPrime(num))vec.push_back(num);}cout << vec.size() << endl;for(int i = 0; i < vec.size(); ++i)cout << vec[i] << ' ';return 0;
}

OpenJudge NOI 1.13 11:回文素数相关推荐

  1. openjudge 1.13.11 回文素数

    OpenJudge - 11:回文素数 解题思路(70分): 1.由于数据量比较大,所以采用埃式筛选法来筛选素数 2.确定最小值和最大值,min=pow(10,n-1),max=pow(10,n) 3 ...

  2. OpenJudge NOI 1.7 34:回文子串

    [题目链接] OpenJudge NOI 1.7 34:回文子串 [题目考点] 1. 字符串 2. 枚举 [解题思路] 假设字符串长为len,先枚举长为2的回文子串,再枚举长为3的回文子串,...,最 ...

  3. 信息学奥赛一本通 1411:区间内的真素数 | OpenJudge NOI 1.13 23:区间内的真素数

    [题目链接] ybt 1411:区间内的真素数 OpenJudge NOI 1.13 23:区间内的真素数 [题目考点] 1. 质数 2. 数字拆分 [解题思路] 设函数判断一个数是否是质数 设函数求 ...

  4. leetcode —— 866. 回文素数

    求出大于或等于 N 的最小回文素数. 回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数. 例如,2,3,5,7,11 以及 13 是素数. 回顾一下,如果一个数从左往右读与从 ...

  5. Java黑皮书课后题第6章:**6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开

    6.27(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数.编写程序,显示前100个反素数,每行显示10个,并且数字间用空格隔开 题目 题目描述 破题 代码 题目 题目描述 ...

  6. Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开

    6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...

  7. NUC1214 回文素数

    回文素数 时间限制: 1000ms 内存限制: 65536KB 问题描述 151 是一个回文素数,因为它既是一个素数又是回文数(回文数是指一个数 从左到右 和 从右到左 读的结果一样). 试写一个程序 ...

  8. NUC1214 回文素数【回文+素数】

    回文素数 时间限制: 1000ms 内存限制: 65536KB 问题描述 151 是一个回文素数,因为它既是一个素数又是回文数(回文数是指一个数 从左到右 和 从右到左 读的结果一样). 试写一个程序 ...

  9. 回文素数(杭电OJ,不喜欢这个题)

    Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 ...

最新文章

  1. Chem. Sci. | 3D深度生成模型进行基于结构的从头药物设计
  2. WIN7系统共享访问方式总结
  3. android 调用本地第三方应用软件,如qq、微信、微博和视频播放器等
  4. 【iCore1S 双核心板_ARM】例程十七:FSMC实验——读写FPGA
  5. POJ 1904 King's Quest(强连通图)题解
  6. angular html清除元素,使用AngularJS删除DOM元素
  7. LeetCode之Merge Sorted Array
  8. 黑猿大叔-译文 | TensorFlow实现Batch Normalization
  9. springboot 2.4.4java.sql.SQLException Access denied for user ‘root‘@‘localhost‘ (using password YES)
  10. JavaWeb——springMVC、mybatis与spring的整合
  11. linux rm -rf 根目录,在linux 根目录rm * -rf以后怎么办?
  12. .net 集合分成几个等数量集合_一课研究之集合图的应用教学设计
  13. Xweibo for Discuz!X1.5V1.1安装教程
  14. php redis 令牌桶算法
  15. c# 语音卡控制--语音卡实现电话录音
  16. 【Photoshop文字排版小技巧】
  17. Existing trial license for IntelliJ IDEA Ultimate 2021.3 is expired
  18. 算法(第4版) 编写一个静态方法lg(),接受一个整型参数N,返回不大于log2N的最大整数。(不要使用Math库)
  19. Sky光遇云野光之翼在哪获得
  20. 计算广告概述【计算广告】

热门文章

  1. java四则出题判分_C#编程之自动出题判分——c#学习实践
  2. Android中连接MySql数据库获取数据的简单实现
  3. (Gradle实操)一步步使用Android Studio配置Gradle并运行Github开源源码
  4. BDTC 2017 | 知识图谱技术背后的应用与实践
  5. MATLAB求解非线性方程
  6. redis学习第一天
  7. ubuntu搭建esp-idf开发环境 解决github下载慢
  8. AMD和Intel的cpu架构的区别
  9. 《数据清洗》——数据转换课后作业
  10. http请求工具详解