UVA10140PrimeDistance题解--质数/技巧
题目链接
https://www.luogu.org/problemnew/show/UVA10140
分析
\(L,R\)都很大,显然不能直接筛出\(L,R\)区间中的质数,这里需要一个结论
结论
任何一个合数\(N\)必定含有一个小于等于\(\sqrt N\)的质因子
证明
反证法,若所有质因子都大于\(\sqrt N\),那么无论怎么组合显然都大于\(N\)
于是通过这个结论筛出\([2,\sqrt R]\),中的所有素数,把它们看作质因子筛出\([L,R]\)中的所有合数
注意如果\(L\)为\(1\)的话需要注意,不要把\(1\)标记为质数,对拍了好久才发现...真坑啊
代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <queue>
#include <cmath>
#define ll long long
#define ri register int
using std::min;
using std::max;
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;return ;
}
const int maxn=1500005;
const int inf=0x7fffffff;
int l,r;
bool ok[maxn],vis[50000];
int prime[50000],tot=0;
inline void get_prime(){
int lim=(int)(std::sqrt(1.0*inf+0.5));
//printf("%d\n",lim);
for(ri i=2;i<=lim;i++){
if(!vis[i]){
vis[i]=1;
prime[++tot]=i;
}
for(ri j=1;j<=tot&&1ll*prime[j]*i<=lim;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
return ;
}
inline void solve(int n){
int lim=(int)(std::sqrt(1.0*n+0.5));
memset(ok,0,sizeof(ok));
int o=1;
while(prime[o]<=lim&&o<=tot){
for(ri k=l/prime[o];k<=r/prime[o];k++){
if(k==1||k==0)continue;
/*注意k=1及k=0都是不合法的情况*/
ok[k*prime[o]-l]=1;
/*左移L位以储存结果*/
}
o++;
}
return ;
}
int main(){
freopen("dat.in","r",stdin);
freopen("wa.out","w",stdout);
get_prime();
while(scanf("%d %d",&l,&r)!=EOF){
/*注意!!!*/
if(l==1)l=2;
//注意!!! 1不是质数
int lnum,lst=-inf,xans=-1,ians=inf;
int a,b,c,d;
solve(r);
for(ri i=0;i<=r-l;i++){
if(!ok[i]){
if(lst!=-inf){
//xans=max(xans,i-lst);
if(i-lst>xans){
c=lst,d=i;
xans=i-lst;
}
if(i-lst<ians){
a=lst,b=i;
ians=i-lst;
}
//ians=min(ians,i-lst);
}
lst=i;
}
}
if(xans==-1){
puts("There are no adjacent primes.");
}
else{
printf("%d,%d are closest, %d,%d are most distant.\n",a+l,b+l,c+l,d+l);
}
}
return 0;
}
UVA10140PrimeDistance题解--质数/技巧的更多相关文章
- HDU 3415 Max Sum of Max-K-sub-sequence 单调队列题解
本题又是一题单调队列题解. 技巧就是须要计算好前n项和Sn = a1 + a2 + ... an 这样方便处理. 记录一条单调队列,其意义是: q(head), q(head+1), ...q(tai ...
- ACdream 1195 Sudoku Checker (数独)
Sudoku Checker Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & %llu Submit ...
- [LeetCode] 196.删除重复的电子邮箱
编写一个 SQL 查询,来删除 Person 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个. +----+------------------+ | Id | Email | +-- ...
- arc098E Range Minimum Queries
题意:给你一个n个数的数组,每次能够选取连续的长度为K的子序列,取出其中任意一个最小元素. 一共操作Q次.问取出的元素中Max-Min最小是多少? 标程: #include<bits/stdc+ ...
- soj114 中位数
题意:给你一个长度为2n-1的数组A,设Bi是A的1~2i-1的中位数.问打乱A,有多少种不同的B序列? 标程: #include<bits/stdc++.h> using namespa ...
- [USACO08OPEN]牛的街区Cow Neighborhoods
题目描述: luogu 题解: 技巧题. 曼哈顿距离:$|x1-x2|+|y1-y2|$ 切比雪夫距离:$\max(|x1-x2|,|y1-y2|)$ 曼哈顿距离转切比雪夫距离:$(x,y)-> ...
- P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)
技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...
- 【题解】HDU4689 Derangement(有技巧的计数DP)
[题解]HDU4689 Derangement(有技巧的计数DP) 传送门 呵呵没告诉我多测组数,然后\(n\le 20,7000\mathrm{ms}\)我写了个状压上去T了 题目大意: 要你求错排 ...
- 《LeetBook》leetcode题解(7): Reverse Integer[E]——处理溢出的技巧
我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 书的地址:https://hk029.gitbooks.io/leetboo ...
随机推荐
- DBeaver 客户端中时间显示问题解决
最近工作使用了一段时间的macOS,换了新的数据库客户端 DBeaver,无意中发现客户端显示时间不正确.时间保存之后显示比实际时间多13个小时整.可以判断是时区没有配置正确.无意中发现是DBeave ...
- Facebook币Libra学习-5.Move组织目录
Move是一种新的编程语言,旨在为Libra Blockchain提供安全可编程的基础. 组织 Move语言目录由五部分组成: 的虚拟机(VM),其中包含的字节码格式,字节码解释器,和基础设施执行事务 ...
- 模糊C均值聚类的公式推导
j=1...n,N个样本 i=1...c,C聚类 一.优化函数 FCM算法的数学模型其实是一个条件极值问题: 把上面的条件极值问题转化为无条件的极值问题,这个在数学分析上经常用到的一种方法就是拉格朗日 ...
- [Scikit-learn] 1.1 Generalized Linear Models - Logistic regression & Softmax
二分类:Logistic regression 多分类:Softmax分类函数 对于损失函数,我们求其最小值, 对于似然函数,我们求其最大值. Logistic是loss function,即: 在逻 ...
- 2018.04.03 ABAP OLE操作整理
OLE整理: 1.定义,分别对应EXCEL,workbook(工作簿),sheet(页),单元格 DATA: EXCEL_OBJ TYPE OLE2_OBJECT, BOOK_OBJ TYPE OLE ...
- JAVA 基础编程练习题50 【程序 50 文件 IO】
50 [程序 50 文件 IO] 题目:有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩), 计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件&qu ...
- windows和Linux下定时启动或关闭服务
http://blog.csdn.net/clare504/article/details/17410643 1.Windows下的定时启动程序可以采用系统的计划和任务,定时启动服务可以在计划任务中添 ...
- HANA数据自助查询
SAP HANA的客户端是C/S模式的,远程使用不太方便,目前有一款TreeSoft数据库管理系统,可以实现通过web方式,访问自助查询HANA数据.大大提高工作效率.还支持MySQL,Oracle, ...
- 小程序签名MD5加密
最近小程序需求一个签名加密,要把请求参数按键值排序并转化为字符串,然后进行MD5加密. //时间戳 var timestamp = (Date.parse(new Date()))/1000;//签名 ...
- PHP中include、require、include_once、require_once的区别
include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行.re ...