博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3247:回文素数
阅读量:5038 次
发布时间:2019-06-12

本文共 1587 字,大约阅读时间需要 5 分钟。

总时间限制: 5000ms 内存限制: 65536kB描述一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121,1221,15651都是回文数。给定位数n,找出所有既是回文数又是素数的n位十进制数。(注:不考虑超过整型数范围的情况)。输入位数n,其中1<=n<=9。输出第一行输出满足条件的素数个数。第二行按照从小到大的顺序输出所有满足条件的素数,两个数之间用一个空格区分。样例输入1样例输出42 3 5 7

 

 

 

这道题挺简单的,本来自己是肯定能够想到平方根为界限的,我开始自己傻了吧唧的,想减少判断过程所需的时间,于是想要初始化的时候预处理出所有小于1000000000是否为素数的标记

结果估计初始化的过程就超时了。。。

直接贴代码了,这太简单了。。。

#include 
#include
#include
using namespace std;const int MAX = 1000000000;int n;queue
q;int m[10]={
0};int coun = 0;bool OK(int k){ if(k <= 1) return false; for(int i = 2; i * i <= k; i++) { if(k%i == 0) return true; } return false;}void work(int i){ if(i == n) { int res = 0; for(int j = 0; j < n; j++) { res *= 10; res += m[j]; } if(OK(res)) { q.push(res); coun++; } return ; } if( i < n/2 || ( n%2!=0 && i < n/2+1 ) ) { for(int j = 0; j < 10; j++) { if(i == 0 &&((j == 0 || j == 2 || j == 5 || j == 4 || j == 6 || j == 8)&&n>1) ) { continue; } m[i] = j; work(i+1); } } else { m[i] = m[n-1-i]; work(i+1); }}int main(){ scanf("%d",&n); work(0); printf("%d\n",coun ); for(int i = 0; i < coun; i++) { int res = q.front(); q.pop(); printf("%d ", res); } printf("\n"); return 0;}

 

 

 

转载于:https://www.cnblogs.com/xiaoshen555/p/3843855.html

你可能感兴趣的文章
HDU 1028 Ignatius and the Princess III(母函数)
查看>>
关于多路复用器的综合结果
查看>>
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
UIActionSheet 修改字体颜色
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
Spring注解之@Lazy注解,源码分析和总结
查看>>
spoj 345
查看>>
ios 设置屏幕方向的两种方法
查看>>
Java编程思想小笔记2
查看>>
正则表达式 之 常用实例
查看>>
【Pandas最好用的函数】
查看>>
Dynamics365解决方案的新特性
查看>>
预生成事件/生成后事件命令行对话框
查看>>
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>