zoukankan      html  css  js  c++  java
  • USACO Section1.5 Prime Palindromes 解题报告

        pprime解题报告 —— icedream61 博客园(转载请注明出处)
    ------------------------------------------------------------------------------------------------------------------------------------------------
    【题目】
      求a到b之间的所有回文素数(即又是素数又是回文数的数)。
    【数据范围】
      5<=a,b<=100,000,000
    【输入样例】
      5 500
    【输出样例】
      5
      7
      11
      101
      131
      151
      181
      191
      313
      353
      373
      383
    ------------------------------------------------------------------------------------------------------------------------------------------------
    【分析】
      筛法求素数+回文数判断。
    ------------------------------------------------------------------------------------------------------------------------------------------------
    【总结】
      第一个点就卡住了,运行时错误。
      题目开始出现大数据了,以后要在交之前测试一下边界情况。
      本机测试没问题,经过多次OJ上测试,得出是定义数组的大小问题。数据给出b的最大值的是100,000,000,但若我bool数组建这么大,会爆运行时错误。
      我的解决办法是,实测满足条件的最大数maxd=9,989,899,于是数组范围定义为d[0~maxd],AC了……
      本题问题在于,我对USACO不甚了解。我查了USACO的内存限制,程序所用内存不能超过16M。
      maxd=9,989,899时,所占内存约为10/8=1.25M,肯定没问题。
      maxd=100,000,000时,所占内存约为100/8=12.5M,应该不超内存的;而USACO上面显示,我的代码运行0.000s时,使用了312KB的内存,这个看来自然是不可信……不知道为什么会超内存,好奇怪,这是为什么?在此向大家请教,希望知道的同学不吝赐教,多谢!

    ------------------------------------------------------------------------------------------------------------------------------------------------

    【代码】

     1 /*
     2 ID: icedrea1
     3 PROB: pprime
     4 LANG: C++
     5 */
     6 
     7 #include <iostream>
     8 #include <fstream>
     9 using namespace std;
    10 
    11 const int maxd = 9989899;
    12 //const int maxd = 100000000;
    13 
    14 int a,b;
    15 bool d[1+maxd];
    16 
    17 int bit[9],l;
    18 bool isPal(int x)
    19 {
    20     l=0;
    21     while(x) { bit[++l]=x%10; x/=10; }
    22     for(int i=1;i<=(l>>1);++i)
    23         if(bit[i]!=bit[l+1-i]) return false;
    24     return true;
    25 }
    26 
    27 int main()
    28 {
    29     ifstream in("pprime.in");
    30     ofstream out("pprime.out");
    31 
    32     d[0]=d[1]=true;
    33     for(int i=2;i<=10000;++i)
    34         if(!d[i])
    35             for(int j=i+i;j<=maxd;j+=i) d[j]=true;
    36 
    37     in>>a>>b;
    38 
    39     for(int i=a;i<=b;++i)
    40         if(i<=maxd && !d[i] && isPal(i)) out<<i<<endl;
    41 
    42     in.close();
    43     out.close();
    44     return 0;
    45 }
  • 相关阅读:
    范例-项目-.NET-PetShop-4.0-架构设计:目录、PetShop概述
    汉语-词语:立志
    汉语-汉字:被
    汉语-成语:被褐怀珠
    汉语-成语:被褐怀玉
    汉语-成语:被褐藏辉
    汉语-词语:处世
    使用exp&imp工具进行数据库备份及恢复
    oracle创建表空间-用户-角色-授权
    linux下单独安装oracle12.1客户端
  • 原文地址:https://www.cnblogs.com/icedream61/p/4324516.html
Copyright © 2011-2022 走看看