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 }
时间: 2024-10-27 05:29:45

hdu 1431 素数回文(暴力打表,埃托色尼筛法)的相关文章

HDU 1431 素数回文-暴力枚举

题目链接:点击打开链接http://acm.hdu.edu.cn/showproblem.php?pid=1431 这道题搞了几天一直Memory Limit Exceeded,始终找不到错误,求指教,不胜感激! 后附有枚举代码! #include <stdio.h> #include <string.h> #include <string> #include <math.h> #include <stdlib.h> #include <i

F题 hdu 1431 素数回文

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1431 素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15041    Accepted Submission(s): 3359 Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151

HDU 1431 素数回文【暴力求解】

/* 题目大意:找一个范围内的所有素数回文数 解题思路:打一个表将1亿以内所有的素数回文数找出来,大概有780个这样子 关键点:暴力求解 解题人:lingnichong 解题时间:2014-08-29 12:02:55 解题体会:如果按一般方法打个素数表,很容易超内存(MLE),所以就先将所有的素数回文全部算出来,再在这个数组里面找在题上那个范围的所有素数回文数 */ 素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 655

HDU 1431 素数回文(打表+技巧,最大回文素数为9989899!!!)

素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17512    Accepted Submission(s): 4033 Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a

题解报告:hdu 1431 素数回文

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1431 解题思路:这道题交了10次才A掉(怪菜鸡太弱...),刚开始是直接用欧拉筛算法模板+简单的判断回文,结果显示超内存...欧拉筛的时间复杂度可是O(n)线性时间...这样我重新解读题目,其最大范围是10的8次方,但多次小修改提交后还是超内存.于是直接用了暴力,结果显示超时,无奈将这两个算法结合在一起,结果还是显示超时.当看到题解之后才明白,欧拉筛(埃氏筛也一样)里面用到int数组开辟的空间比较占

HDU 1431 素数回文(回文素数)

http://acm.hdu.edu.cn/showproblem.php?pid=1431 题意: 给你两个整数a,b.(5 <= a < b <= 100,000,000)要你按顺序输出[a,b]区间内的所有回文素数. 分析: 定理:如果一个数是回文且有偶数位,那么它能被11整除. 根据上面定理我们可知我们只需要找到区间[2,1000W)内的素数即可.(想想为什么)上面b的范围直接缩小了10倍. 剩下的工作就是用筛选法求出1000W内的所有素数,然后对于给定的a和b,我们对于[a,b

HDU 1431 素数回文

有人问我这个问题. 个人感觉暴搜会TLE O(n*sqrt(n)).n=100000000:(判断素数用2~sqrt(n)+1 去除) 还是枚举好了.枚举 1~10000,把他每一位存下来,回文数已知 left ,求 right ,然后组合起来. 例如 1 ,判断 11 是否素数. 例如 10 ,判断 101 是否素数, 判断 1001 是否素数. 这样复杂度就是 O(n^2). 开始我 bool pa[100000000] 准备用标记来确定.结果MLE. 然后算了一下 总共有多少个数,最多 7

HDU1431 素数回文 【暴力】

素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10762    Accepted Submission(s): 2498 Problem Description xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a

4N - 素数回文

xiaoou33对既是素数又是回文的数特别感兴趣.比如说151既是素数又是个回文.现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数.(5 <= a < b <= 100,000,000); Input 这里有许多组数据,每组包括两组数据a跟b. Output 对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行. Sample Input 5 500 Sample Output 5 7 1