hdu 1431 素数回文(暴力打表,埃托色尼筛法)
这题开始想时,感觉给的范围5 <= a < b <= 100,000,000太大,开数组肯定爆内存,而且100000000也不敢循环,不超时你打我,反正我是不敢循环。
这题肯定得打表,筛素数肯定用埃托色尼筛法(不好意思把大名鼎鼎的埃拉托色尼名字打错了,表打我)。
再看当你所找的回文数的位数为偶数时,有如下定理除11外所有偶数位数的回文数都能被11整除,所以所有偶数位数的回文都不是素数。
证明看如下(我手写的)
手机像素渣(凑活着吧)字丑也凑和着。
证完后我们在来说题目给的数据范围
所以当有8位时都不可以,所以数据缩小为999999;
那么下面就用素数筛法直接打表就行了。
然后再开个数组存回文的素数。
但是一开始我是用int开数组来筛素数的,不得不说傻逼了,内存爆到家了,我一开始很郁闷,这咋爆了呢,我靠,后来一想int型占4个字节,改成bool型的
哈哈,没爆,过了,bool型占一字节,所以内存果断下降4倍。我以前一直开int型的。我煞笔本来准备开longlong 的,估计要爆到姥姥家。
下面看代码:
- 1 #include<stdio.h>
- 2 bool a[9989900]={0};
- 3 int pp(int n);
- 4 int dd[1000];//素数回文数组本来以为会很大,但却很少,可以先打表看看。
- 5 int main(void)
- 6 {
- 7 int n,i,j,k,p,q;
- 8 a[0]=true;
- 9 a[1]=true;
- 10 for(i=2; i<4000; i++)
- 11 {
- 12 if(a[i]==0)
- 13 {
- 14 for(j=i; i*j<9989900; j++)
- 15 {
- 16 a[i*j]=true;
- 17 }
- 18 }
- 19 }//素数筛选暴力打表
- 20 int kk=0;
- 21 int t=0;
- 22 for(i=5;i<9989900;i++)
- 23 {
- 24 if(!a[i]&&pp(i))
- 25 {
- 26 dd[t++]=i;
- 27 }
- 28 }//选出回文加入数组
- 29
- 30 while(scanf("%d %d",&p,&q)!=EOF)
- 31 {for(i=0;i<t;i++)
- 32 {
- 33 if(dd[i]>=p&&dd[i]<=q)
- 34 {
- 35 printf("%d\n",dd[i]);
- 36 }
- 37 if(dd[i]>q)
- 38 {
- 39 break;
- 40 }
- 41 }
- 42 printf("\n");
- 43 }
- 44
- 45 return 0;
- 46
- 47
- 48 }
- 49
- 50 int pp(int n)//判断回文,正着和反着数值大小都一样
- 51 {
- 52 int i;
- 53 int y=0;int yy=n;int uu=1;
- 54 while(n>0)
- 55 {
- 56 y=y*10+n%10;
- 57 n=n/10;
- 58 }
- 59
- 60 if(y==yy)
- 61 {
- 62 return 1;
- 63 }
- 64 return 0;
- 65 }
hdu 1431 素数回文(暴力打表,埃托色尼筛法)的更多相关文章
- HDU 1431 素数回文 离线打表
题目描述:给定一个区间,将这个区间里所有既是素数又是回文数的数输出来. 题目分析:这题的这个数据范围比较大,达到了10^8级别,而且输入的数据有多组,又因为判断一个数是否是回文数貌似只有暴力判断,时间 ...
- F题 hdu 1431 素数回文
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1431 素数回文 Time Limit: 2000/1000 MS (Java/Others) M ...
- 题解报告:hdu 1431 素数回文
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1431 Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说 ...
- HDU 1431 素数回文
有人问我这个问题. 个人感觉暴搜会TLE O(n*sqrt(n)).n=100000000:(推断素数用2~sqrt(n)+1 去除) 还是枚举好了. 枚举 1~10000,把他每一位存下来,回文数已 ...
- 素数回文(hdu1431)
素数回文 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 4N - 素数回文
xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数.(5 &l ...
- 素数回文(dfs,有bug)
素数回文 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 12--c完数/最大公约数/最小公倍数/素数/回文数
完数/最大公约数/最小公倍数/素数/回文数 2015-04-08 10:33 296人阅读 评论(0) 收藏 举报 分类: C/C++(60) 哈尔滨工业大学(8) 版权声明:本文为博主原创文章 ...
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
随机推荐
- 09 eclipse配置maven环境
eclipse配置maven环境 一.打开eclipse:Window>>Preferences: 二.搜索:"maven",然后点击:"Installati ...
- Kafka入门教程(二)
转自:https://blog.csdn.net/yuan_xw/article/details/79188061 Kafka集群环境安装 相关下载 JDK要求1.8版本以上. JDK安装教程:htt ...
- Shell学习(四)——shell中各种括号的作用
参考博客: [1]shell中各种括号的作用().(()).[].[[]].{} [2]shell中的单层大/中/小括号.双层大中小括号.命令替换等 一.前言 目录 单括号() 双括号(( )) 单中 ...
- Linux基础命令---sendmail发送邮件
sendmail sendmail是postfix中的一个发送邮件的代理程序,它负责发送邮件到远程服务器,并且可以接收邮件.sendmail在发送邮件的时候,默认从标砖输入读取内容,以".& ...
- Dubbo多注册中心
一.创建提供者08-provider-registers (1) 创建工程 直接复制05-provider-group工程,并命名为08-provider-registers (2) 修改配置文件 二 ...
- 【编程思想】【设计模式】【结构模式Structural】代理模式Proxy
Python版 https://github.com/faif/python-patterns/blob/master/structural/proxy.py #!/usr/bin/env pytho ...
- springboot 设置项目路劲后不能访问首页
环境背景 学习版本 : springboot2.31 controller 代码 @controller public class Iindex{ @RequestMapping("/&q ...
- 【Java 基础】Java日期格式问题
1. Use SimpleDateFormat to format Date. Watch out, SDF is NOT THREAD-SAFE, it might not be important ...
- JavaEE复习三
Http协议是基于请求/响应模式.无状态的协议:所有请求时相互独立的.无连续的:服务器无法记住与识别用户. 对于简单的页面浏览或信息获取,http协议可以完全胜任:对于需要提供客户端和服务器端交互的网 ...
- 『与善仁』Appium基础 — 20、Appium元素定位
目录 1.by_id定位 2.by_name定位 3.by_class_name定位 4.by_xpath定位 5.by_accessibility_id定位 6.by_android_uiautom ...