1619: 【例 1】Prime Distance

题目描述

原题来自:Waterloo local,题面详见 POJ 2689

给定两个整数 L,R,求闭区间 [L,R] 中相邻两个质数差值最小的数对与差值最大的数对。当存在多个时,输出靠前的素数对。

输入格式

多组数据。每行两个数 L,R。

输出格式

详见输出样例。

样例

样例输入

  1. 2 17
  2. 14 17

样例输出

  1. 2,3 are closest, 7,11 are most distant.
  2. There are no adjacent primes.

数据范围与提示

对于全部数据 1≤L<R<231,R−L≤106

sol:不会算复杂度,总之怎么暴力都能过

先筛出1~500000的质数,在 l~r 中暴力去掉合数(真的非常非常非常非常非常非常暴力)

  1. for(i=;i<=*Prim&&Prim[i]<=r;i++)
  2. {
  3. int aa=(l-)/Prim[i]+;
  4. aa+=((aa==)?():());
  5. int bb=r/Prim[i];
  6. for(j=aa;j<=bb;j++)
  7. {
  8. Bo[j*Prim[i]-l+]|=;
  9. }
  10. }

然后尴尬的过了

Ps:注意如果 l =1 的话要把 l 变成 2,因为 1 不是质数也筛不掉,不直接去掉会当成答案记录

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef int ll;
  4. inline ll read()
  5. {
  6. ll s=;
  7. bool f=;
  8. char ch=' ';
  9. while(!isdigit(ch))
  10. {
  11. f|=(ch=='-');
  12. ch=getchar();
  13. }
  14. while(isdigit(ch))
  15. {
  16. s=(s<<)+(s<<)+(ch^);
  17. ch=getchar();
  18. }
  19. return (f)?(-s):(s);
  20. }
  21. #define R(x) x=read()
  22. inline void write(ll x)
  23. {
  24. if(x<)
  25. {
  26. putchar('-');
  27. x=-x;
  28. }
  29. if(x<)
  30. {
  31. putchar(x+'');
  32. return;
  33. }
  34. write(x/);
  35. putchar((x%)+'');
  36. return;
  37. }
  38. inline void writeln(ll x)
  39. {
  40. write(x);
  41. putchar('\n');
  42. return;
  43. }
  44. #define W(x) write(x),putchar(' ')
  45. #define Wl(x) writeln(x)
  46. const int N=;
  47. int Prim[N];
  48. bool Bo[N];
  49. bool Used[N];
  50. inline void Pre_Prime()
  51. {
  52. int i,j;
  53. for(i=;i<=;i++)
  54. {
  55. if(!Bo[i])
  56. {
  57. Prim[++*Prim]=i;
  58. }
  59. for(j=;j<=*Prim&&Prim[j]*i<=;j++)
  60. {
  61. Bo[Prim[j]*i]=;
  62. if(i%Prim[j]==) break;
  63. }
  64. }
  65. }
  66. int Num[N];
  67. int main()
  68. {
  69. int i,j,l,r;
  70. Pre_Prime();
  71. while(~scanf("%d%d",&l,&r))
  72. {
  73. l+=(l==)?():();
  74. *Num=;
  75. memset(Bo,,sizeof Bo);
  76. for(i=;i<=*Prim&&Prim[i]<=r;i++)
  77. {
  78. int aa=(l-)/Prim[i]+;
  79. aa+=((aa==)?():());
  80. int bb=r/Prim[i];
  81. for(j=aa;j<=bb;j++)
  82. {
  83. Bo[j*Prim[i]-l+]|=;
  84. }
  85. }
  86. for(i=;i<=r-l+;i++) if(!Bo[i])
  87. {
  88. // printf("i=%d\n",i);
  89. Num[++*Num]=i+l-;
  90. }
  91. if(*Num<)
  92. {
  93. puts("There are no adjacent primes.");
  94. }
  95. else
  96. {
  97. int O1=,O2=;
  98. for(i=;i<*Num;i++)
  99. {
  100. if(Num[i+]-Num[i]<Num[O1+]-Num[O1]) O1=i;
  101. if(Num[i+]-Num[i]>Num[O2+]-Num[O2]) O2=i;
  102. }
  103. printf("%d,%d are closest, %d,%d are most distant.",Num[O1],Num[O1+],Num[O2],Num[O2+]);
  104. putchar('\n');
  105. }
  106. }
  107. return ;
  108. }
  109. /*
  110. input
  111. 2 17
  112. 14 17
  113. output
  114. 2,3 are closest, 7,11 are most distant.
  115. There are no adjacent primes.
  116. */

一本通1619【例 1】Prime Distance的更多相关文章

  1. 数论 - 素数的运用 --- poj 2689 : Prime Distance

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12512   Accepted: 3340 D ...

  2. UVA 10140 - Prime Distance(数论)

    10140 - Prime Distance 题目链接 题意:求[l,r]区间内近期和最远的素数对. 思路:素数打表,打到sqrt(Max)就可以,然后利用大的表去筛素数.因为[l, r]最多100W ...

  3. poj 2689 Prime Distance(大区间素数)

    题目链接:poj 2689 Prime Distance 题意: 给你一个很大的区间(区间差不超过100w),让你找出这个区间的相邻最大和最小的两对素数 题解: 正向去找这个区间的素数会超时,我们考虑 ...

  4. [POJ268] Prime Distance(素数筛)

    /* * 二次筛素数 * POJ268----Prime Distance(数论,素数筛) */ #include<cstdio> #include<vector> using ...

  5. POJ2689 Prime Distance(数论:素数筛选模板)

    题目链接:传送门 题目: Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Des ...

  6. POJ-2689 Prime Distance (两重筛素数,区间平移)

    Prime Distance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13961   Accepted: 3725 D ...

  7. UVA10140 Prime Distance

    UVA10140 Prime Distance 给定两个整数L,R(1<=L<=R<=2^{31},R-L<=10^6)L,R(1<=L<=R<=231,R− ...

  8. ZOJ 1842 Prime Distance(素数筛选法2次使用)

    Prime Distance Time Limit: 2 Seconds      Memory Limit: 65536 KB The branch of mathematics called nu ...

  9. 解题报告:poj2689 Prime Distance

    2017-10-03 11:29:20 writer:pprp 来源:kuangbin模板 从已经筛选好的素数中筛选出规定区间的素数 /* *prime DIstance *给出一个区间[L,U],找 ...

随机推荐

  1. java从命令行接受多个数字求和输出

    一·设计思路 1.定义一个整型变量sum,用于接收和 2.利用循环将命令行数字求和 3.输出参数个数以及参数之和 二·流程图 三·程序源代码 public class JavaAppArguments ...

  2. Luogu4640 BJWC2008 王之财宝 容斥、Lucas

    传送门 题意:有$N$种物品,其中$T$个物品有限定数量$B_i$,其他则没有限定.问从中取出不超过$M$个物品的方案数,对质数$P$取模.$N,M \leq 10^9 , T \leq 15 , P ...

  3. 搭建Zookeepeer源码工程

    一.搭建ant环境 1.下载ant&将ant解压至安装目录 http://ant.apache.org/bindownload.cgi 2.配置环境变量 ANT_HOME:配置ant的安装目录 ...

  4. Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡

    接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端 ...

  5. 介绍HTTP协议的传输过程

    1.HTTP是面向事物的应用层协议,它使用TCP连接进行可靠传输,服务器默认监听在80端口 2.服务流程 从协议执行过程来说,当浏览器要访问www服务器时,首先要对服务器进行域名解析(DNS协议).一 ...

  6. C#_根据银行卡卡号判断银行名称

    /// <summary> /// 银行信息 /// </summary> public class BankInfo { #region 数组形式存储银行BIN号 /// & ...

  7. CentOS7下安装Docker-Compose操作记录

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具.安装Docker-Compose之前,请先安装 python-pip 一.安装 python-pip [root@workben ...

  8. 2017乌鲁木齐区域赛D题Fence Building-平面图的欧拉公式

    这个题B站上面有这题很完整的分析和证明,你实在不懂,可以看看这个视频  https://www.bilibili.com/video/av19849697?share_medium=android&a ...

  9. Linux内核分析作业五

    扒开系统调用的三层皮(下) 给MenuOS增加time和time-asm命令 步骤 rm menu -rf //强制删除 git clone http://github.com/menging/men ...

  10. Linux内核分析 第七周 可执行程序的装载

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...