NOI-OJ 1.13 ID:23 区间内的真素数
整体思路
这里需要大量使用素数,必须能够想到只求出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 区间内的真素数的更多相关文章
- Openjudge 1.13-23:区间内的真素数(每日一水)
总时间限制: 1000ms 内存限制: 65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数.真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为 ...
- Openjudge 1.13-23:区间内的真素数
总时间限制: 1000ms 内存限制: 65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数. 真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就 ...
- PKUOJ 区间内的真素数
http://bailian.openjudge.cn/tm2018/A/ #include <iostream> #include <math.h> #include < ...
- SPOJ 3267 D-query(离散化+主席树求区间内不同数的个数)
DQUERY - D-query #sorting #tree English Vietnamese Given a sequence of n numbers a1, a2, ..., an and ...
- RR区间锁 不是唯一索引,即使区间内没值,也锁
+--------- +---------------------------------------------------------------------------------------- ...
- hdu 4630 查询[L,R]区间内任意两个数的最大公约数
No Pain No Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- P1440 求m区间内的最小值--洛谷luogu
题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值.若前面的数不足m项则从第1个数开始,若前面没有数则输出0. 输入输出格式 输入格式: 第一行两个 ...
- 【hdu5381】维护区间内所有子区间的gcd之和-线段树
题意:给定n个数,m个询问,每次询问一个区间内所有连续子区间的gcd的和.n,m<=10^5 题解: 这题和之前比赛的一题很像.我们从小到大枚举r,固定右端点枚举左端点,维护的区间最多只有log ...
随机推荐
- 系统功能调用Windows操作系统原理实验
一.实验目的 1.熟悉操作系统的系统功能调用. 2.掌握用C语言实现系统功能调用的方法和步骤. 3.掌握利用10H号功能调用(BIOS的显示I/O功能调用)来实现对屏幕的操作与控制. 二.实验内容 1 ...
- LeetCode算法题-Minimum Index Sum of Two Lists(Java实现)
这是悦乐书的第272次更新,第286篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第139题(顺位题号是599).假设Andy和Doris想要选择一家餐馆吃晚餐,他们都有 ...
- 聚类——GMM
聚类——认识GMM算法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.GMM概述 二.GMM算法步骤 三.具体推导参考文献 1. 李航. 统计学习 ...
- LinuxMint上安装redis和python遇到的一些问题
今天在安装Redis和Python上遇到了些问题,解决后记录下来. 环境:LinuxMint 18.3 安装redis sudo wget http://download.redis.io/relea ...
- hmac_检验客户端是否合法
老师博客:http://www.cnblogs.com/Eva-J/articles/8244551.html#_label6 server端 import socket import os impo ...
- STM32 FSMC使用笔记
最近在使用STM32的FSMC与FPGA做并行通信总线控制,做一下总结 1,利用FSMC读取写入16位数据时的封装函数如下,不这样使用的话在与FPGA进行通信的过程中可能会出现不可预知的错误. #de ...
- 【css3】使用filter属性实现改变svg图标颜色
1.兼容性: 2.应用场景:新增页面上传svg图标后,更改图标颜色后,在列表页面展示色值改后的svg图标. 3.解决方案:使用filter属性中的 drop-shadow,drop-shadow滤镜可 ...
- Label Encoding vs One Hot Encoding
最近在刷kaggle的时候碰到了两种处理类别型特征的方法:label encoding和one hot encoding.我从stackexchange, quora等网上搜索了相关的问题,总结如下. ...
- 微信小程序代码快速转化为H5代码的方法!
1.把小程序html里面的如下标签对应改成小程序的标签,即可快速转化成H5的页面! 利用ctrl+H将下面的对应标签全部替换! html: <view === <div </view ...
- IdentityServer4【Topic】Consent
Conset这个概念在Identityserver4中是表示要当前用户对第三方应用对资源请求的一个确认,它会被做成一个页面. 术语映射: Consent page--确认页面,我喜欢叫做Consent ...