题意:

给一个区间[L,U],(1<=L< U<=2,147,483,647),U-L<=1000000,求出[L,U]内距离近期和距离最远的素数对。

因为L,U都小于2^32,所以区间内的合数的最小质因子必定小于2^16,所以先筛出2^16以内的素数,用筛出来的素数去筛[L,U]内的合数。然后把[L,U]内的素数保存下来,再搜索近期和最远的素数对就可以。注意两整数相乘可能溢出32位,注意对1的推断。

代码:

  1. #include <cstdlib>
  2. #include <cctype>
  3. #include <cstring>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include<climits>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <string>
  10. #include <iostream>
  11. #include <sstream>
  12. #include <map>
  13. #include <set>
  14. #include <queue>
  15. #include <stack>
  16. #include <fstream>
  17. #include <numeric>
  18. #include <iomanip>
  19. #include <bitset>
  20. #include <list>
  21. #include <stdexcept>
  22. #include <functional>
  23. #include <utility>
  24. #include <ctime>
  25. using namespace std;
  26.  
  27. #define PB push_back
  28. #define MP make_pair
  29.  
  30. #define REP(i,x,n) for(int i=x;i<(n);++i)
  31. #define FOR(i,l,h) for(int i=(l);i<=(h);++i)
  32. #define FORD(i,h,l) for(int i=(h);i>=(l);--i)
  33. #define SZ(X) ((int)(X).size())
  34. #define ALL(X) (X).begin(), (X).end()
  35. #define RI(X) scanf("%d", &(X))
  36. #define RII(X, Y) scanf("%d%d", &(X), &(Y))
  37. #define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))
  38. #define DRI(X) int (X); scanf("%d", &X)
  39. #define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
  40. #define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)
  41. #define OI(X) printf("%d",X);
  42. #define RS(X) scanf("%s", (X))
  43. #define MS0(X) memset((X), 0, sizeof((X)))
  44. #define MS1(X) memset((X), -1, sizeof((X)))
  45. #define LEN(X) strlen(X)
  46. #define F first
  47. #define S second
  48. #define Swap(a, b) (a ^= b, b ^= a, a ^= b)
  49. #define Dpoint strcut node{int x,y}
  50. #define cmpd int cmp(const int &a,const int &b){return a>b;}
  51.  
  52. /*#ifdef HOME
  53. freopen("in.txt","r",stdin);
  54. #endif*/
  55. const int MOD = 1e9+7;
  56. typedef vector<int> VI;
  57. typedef vector<string> VS;
  58. typedef vector<double> VD;
  59. typedef long long LL;
  60. typedef pair<int,int> PII;
  61. //#define HOME
  62.  
  63. int Scan()
  64. {
  65. int res = 0, ch, flag = 0;
  66.  
  67. if((ch = getchar()) == '-') //推断正负
  68. flag = 1;
  69.  
  70. else if(ch >= '0' && ch <= '9') //得到完整的数
  71. res = ch - '0';
  72. while((ch = getchar()) >= '0' && ch <= '9' )
  73. res = res * 10 + ch - '0';
  74.  
  75. return flag ? -res : res;
  76. }
  77. /*----------------PLEASE-----DO-----NOT-----HACK-----ME--------------------*/
  78. #define MAXN 100000
  79. int prime[MAXN];
  80. int vis[MAXN+5];
  81. int cnt;
  82. void getprime()
  83. {cnt=0;
  84. for(int i=2;i<=MAXN;i++)
  85. if(!vis[i])
  86. {
  87. prime[cnt++]=i;
  88. for(int j=0;j<cnt&&prime[j]<=MAXN/i;j++)
  89. {
  90. vis[prime[j]*i]=1;
  91. if(i%prime[j]==0)
  92. break;
  93. }
  94. }
  95.  
  96. }
  97.  
  98. int notprime[1000000+5];
  99. int prime2[1000000+5];
  100. int cnt2;
  101. void getprime2(int L,int U)
  102. {
  103.  
  104. for(int i=0;i<cnt;i++)
  105. { if(prime[i]>=U)
  106. break;
  107. int s=L/prime[i];
  108. if(s<=1)
  109. s=2;
  110. for(int j=s;(long long)prime[i]*j<=U;j++)
  111. if((long long )prime[i]*j>=L)
  112. {
  113. notprime[(long long )prime[i]*j-L]=1;
  114. }
  115. }
  116. cnt2=0;
  117. REP(i,0,U-L+1)
  118. {
  119. if(!notprime[i]&&(i+L)!=1&&(i+L)!=0)
  120. prime2[cnt2++]=i+L;
  121.  
  122. }
  123.  
  124. }
  125.  
  126. int main()
  127. {getprime();
  128. int L,U;
  129. while(RII(L,U)!=EOF)
  130. {
  131. MS0(notprime);
  132. getprime2(L,U);
  133. int ans1=INT_MAX;
  134. int ans2=0;
  135. int n1,n2,f1,f2;
  136. if(cnt2<2)
  137. {
  138. printf("There are no adjacent primes.\n");
  139. continue;
  140. }
  141. REP(i,0,cnt2-1)
  142. {
  143. if(prime2[i+1]-prime2[i]<ans1)
  144. {
  145. ans1=prime2[i+1]-prime2[i];
  146. n1=prime2[i];
  147. n2=prime2[i+1];
  148. }
  149. if(prime2[i+1]-prime2[i]>ans2)
  150. {
  151. ans2=prime2[i+1]-prime2[i];
  152. f1=prime2[i];
  153. f2=prime2[i+1];
  154. }
  155. }
  156. printf("%d,%d are closest, %d,%d are most distant.\n",n1,n2,f1,f2);
  157. }
  158.  
  159. return 0;
  160. }

大区间素数筛选 POJ2689的更多相关文章

  1. LightOJ1197 Help Hanzo —— 大区间素数筛选

    题目链接:https://vjudge.net/problem/LightOJ-1197 1197 - Help Hanzo    PDF (English) Statistics Forum Tim ...

  2. LightOJ 1197 LightOJ 1197(大区间素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1197 题目大意: 就是给你一个区间[a,b]让你求这个区间素数的个数 但a.b的值太大没法直接进 ...

  3. 大区间素数筛选(POJ 2689)

    /* *POJ 2689 Prime Distance *给出一个区间[L,U],找出区间内容.相邻的距离最近的两个素数和距离最远的两个素数 *1<=L<U<=2147483647 ...

  4. LightOj 1197 Help Hanzo (区间素数筛选)

    题目大意: 给出T个实例,T<=200,给出[a,b]区间,问这个区间里面有多少个素数?(1 ≤ a ≤ b < 231, b - a ≤ 100000) 解题思路: 由于a,b的取值范围 ...

  5. 2017ACM暑期多校联合训练 - Team 4 1003 HDU 6069 Counting Divisors (区间素数筛选+因子数)

    题目链接 Problem Description In mathematics, the function d(n) denotes the number of divisors of positiv ...

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

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

  7. LightOJ 1197 Help Hanzo(区间素数筛选)

    E - Help Hanzo Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit ...

  8. M - Help Hanzo LightOJ - 1197 (大区间素数筛法)

    题解:素数区间问题.注意到a和b的范围是1<<31,所以直接暴力打表肯定不可以.如果一个数是合数,他的两个因子要么是两个sqrt(x),要么就分布在sqrt(x)两端,所以我们可以根据sq ...

  9. Prime Count 求大区间素数个数

    http://acm.gdufe.edu.cn/Problem/read/id/1333 https://www.zhihu.com/question/29580448/answer/44874605

随机推荐

  1. JMP软件中的晶圆图( Wafer Map)分析

    关键词:芯片 良率分析 晶圆图 质量管理 JMP Minitab 半导体芯片的生产,简单来讲,是将电路通过各种复杂的物理化学方法制作到晶圆上,在生产的最后阶段会进行不同电性功能的测试以确保产品的功能性 ...

  2. HDU 4009 不定根最小树形图

    讲一下建图过程,首先建立一个超级源点S,对于这个源点,向每个HOUSE连一条有向边,权值为该HOUSE建立WELL的费用,即高度*X. 然后每个可以连边的WELL之间,费用为曼哈顿距离*Y,然后考虑两 ...

  3. 【DataStructure In Python】Python模拟链表

    最近一直在学习Python和Perl这两门语言,两者共同点很多,也有不多.希望通过这样的模拟练习可以让自己更熟悉语言,虽然很多时候觉得这样用Python或者Perl并没有体现这两者的真正价值. #! ...

  4. Android开发之ADT中无Annotation Processin的解决办法

    使用ButterKnife的时候,进入ADT中设置的时候发现在Java Compiler展开后无Annotation Processin 解决办法: 安装插件:Juno - http://downlo ...

  5. poj棋盘分割(记忆化)

    http://poj.org/problem?id=1191 黑书上P116 想了挺久 没想出来 想推出一公式来着 退不出来.. 想偏了  正解:递归 #include <iostream> ...

  6. BZOJ_1600_[Usaco2008_Oct]_建造栅栏_(动态规划)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1600 将长度为n的线段分成4段,长度为整数,围成面积>0的四边形,求方案数. 分析 首先 ...

  7. Memcached‘do_item_get’函数安全漏洞

    漏洞名称: Memcached‘do_item_get’函数安全漏洞 CNNVD编号: CNNVD-201401-175 发布时间: 2014-01-15 更新时间: 2014-01-15 危害等级: ...

  8. Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞

    漏洞名称: Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-068 发布时间: 2 ...

  9. -_-#【减少 DOM 元素】textarea, script 延迟渲染

    淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式 淘宝详情页的BigRender优化的最佳方式 <!DOCTYPE html> <html> < ...

  10. HelloXV1.77网络功能简介

    HelloXV1.77的网络功能做了较大程度的加强,移植了业界广泛使用的lwIP协议栈,并做了很多优化工作,修正了其中的一些bug.同时,实现了一个network字符界面应用程序,可以对网络功能进行调 ...