• 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
    ",dd[i]);
    36         }
    37         if(dd[i]>q)
    38         {
    39             break;
    40         }
    41     }
    42 printf("
    ");
    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 }
    油!油!you@
  • 相关阅读:
    学会Git玩转Github笔记(一)——Github基本概念 & 仓库管理
    Github 入门基本操作
    Struts2拦截器浅析
    SSH(Struts2+Spring4+Hibernate4)框架教程之配置篇
    Spring 体系结构
    Ubuntu启动sshd服务
    jquery ajax/post 请求 案例
    Elasticsearch 配置
    Jenkins安装与配置
    解决Ubuntu环境变量错误导致无法正常登录  (command 'xxx' is available in bin ls)
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/4927291.html
Copyright © 2020-2023  润新知