整体思路

  • 这里需要大量使用素数,必须能够想到只求出M到N之间的素数是不够的,因为M到N之间数字的反序有可能是大于M或小于N的数字,例如M=2,N=20,那么19的反序91大于20,所以使用埃拉拖色尼算法计算素数表的时候要让范围尽可能大,根据题目要求,设计为1~100000。

  • 本题也可以尝试不使用阿拉托色尼算法,对M和N之间的每一个数及其反序进行素数判断。

  • 本题的难点是求反序,方法较多,例程中提供两种技巧供参考:

例程

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
bool ss[100001]; //素数表
int count; //计数器 void altsn(int N){ //埃拉拖色尼算法
ss[0]=1;
ss[1]=1;
int p=2;
while(p<=sqrt(N))
if(ss[p]) p++;
else{
int times=2;
while(p*times<=N) { ss[p*times]=1; times++;}
p++;
}
} bool isP(int n){ //素数判断函数
if(!ss[n]) return true;
return false;
} int rev(int n){ //反序方法1
char s1[10],s2[10];
int len, reverse;
sprintf(s1, "%d", n); //sprintf输出到数组s1
len=strlen(s1); //反序复制到s2
for(int i=0; i<len; i++) s2[len-1-i]=s1[i];
s2[len]='\0'; //将s2补全为字符串
sscanf(s2, "%d", &reverse); //使用sscanf从s2中提取一个int
return reverse;
} int rev2(int n){ //反序方法2
int weishu=0; //n的位数
int reverse=0;
int t=n;
while(t){ //计算n的位数
weishu++;
t/=10;
}
t=n;
while(t){ //循环计算反序数值reverse
reverse+=(t%10)*pow(10, --weishu);
t/=10;
}
return reverse;
} int main(){
int M, N;
cin>>M>>N;
altsn(100000);
for(int i=M; i<=N; i++)
if(isP(i) && isP(rev(i))){ //如果i和i的反序都是素数
count++;
if(count==1) //第一次输出只输出数字
printf("%d", i);
else //以后每次先输出逗号,再输出数字
printf(",%d", i);
}
if(!count) printf("No");
return 0;
}

NOI-OJ 1.13 ID:23 区间内的真素数的更多相关文章

  1. Openjudge 1.13-23:区间内的真素数(每日一水)

    总时间限制:  1000ms 内存限制:  65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数.真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为 ...

  2. Openjudge 1.13-23:区间内的真素数

    总时间限制:  1000ms 内存限制:  65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数. 真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就 ...

  3. PKUOJ 区间内的真素数

    http://bailian.openjudge.cn/tm2018/A/ #include <iostream> #include <math.h> #include < ...

  4. SPOJ 3267 D-query(离散化+主席树求区间内不同数的个数)

    DQUERY - D-query #sorting #tree English Vietnamese Given a sequence of n numbers a1, a2, ..., an and ...

  5. RR区间锁 不是唯一索引,即使区间内没值,也锁

    +--------- +---------------------------------------------------------------------------------------- ...

  6. hdu 4630 查询[L,R]区间内任意两个数的最大公约数

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  8. P1440 求m区间内的最小值--洛谷luogu

    题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...

  9. 【hdu5381】维护区间内所有子区间的gcd之和-线段树

    题意:给定n个数,m个询问,每次询问一个区间内所有连续子区间的gcd的和.n,m<=10^5 题解: 这题和之前比赛的一题很像.我们从小到大枚举r,固定右端点枚举左端点,维护的区间最多只有log ...

随机推荐

  1. 微信共享收货地址 edit_address:fail 吐白沫级解决方案

    又被微信坑了一整天,看完官方文档怎么测试都不通过,我一直怀疑是新版本微信支付我没有设置“共享收货地址”开关造成的. 后来经过验证,新版本不需要做这件事了. 那么,我没错,是微信的文档没及时更新... ...

  2. 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载

    Sublime Text这款代码编辑器是Jeff 一直都在使用的,前段时间转用到版本3,因为感觉Sublime Text 3 启动速度更加快,运行更加流畅——虽然3 还是在Beta 阶段.下面就直接分 ...

  3. Hive UDF开发实例学习

    1. 本地环境配置 必须包含的一些包. http://blog.csdn.net/azhao_dn/article/details/6981115 2. 去重UDF实例 http://blog.csd ...

  4. openstack问题汇总

    No tenant network is available for allocation.    No tenant network is available for allocation. 这个问 ...

  5. Asp.Net分页存储过程

      SQL分页语句 一.比较万能的分页: sql代码: 1 2 3 select top 每页显示的记录数 * from topic where id not in  (select top (当前的 ...

  6. (转载)EhLib 在 Delphi 7 下的安装方法

    EhLib 在 Delphi 7 下的安装方法 1.将 EhLib 解压到一个目录,如:E:\VCL\EhLib: 2.将 EhLib 安装目录下 Common 目录.DataService 目录下的 ...

  7. UNITY3D中的文件存储管理

    使用Path对象判断路径的完整性和正确性 using System; using System.IO; class Test { public static void Main() { string ...

  8. Mac 安装Eclipse

    1.下载 1.1.网址 http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/mar ...

  9. 苹果笔记本 如何配置成php开发系统

    方法一 启动内置的apace 打开终端输入命令 停止服务:sudo /usr/sbin/apachectl stop 开启服务:sudo /usr/sbin/apachectl start 重启服务: ...

  10. (很难啊)如何实时获取DBGrid 中当前单元格输入的内容? [问题点数:100分,结帖人yifawu100]

    如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理,用什么事件呢? 所以Field的Onchange事件是没用的. DBGrid1.Selec ...