当前位置: 首页 > news >正文

poj 2689 Prime Distance (素数二次筛法)

2689 -- Prime Distance

  没怎么研究过数论,还是今天才知道有素数二次筛法这样的东西。

  题意是,要求求出给定区间内相邻两个素数的最大和最小差。

  二次筛法的意思其实就是先将1~sqrt(b)内的素数先筛出来,然后再对[a,b]区间用那些筛出来的素数再次线性筛。

代码如下:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <iostream>
 5 
 6 using namespace std;
 7 
 8 const int N = 66666;
 9 int prm[N >> 3], pn;
10 bool np[N];
11 
12 void getbase() {
13     np[pn = 0] = np[1] = true;
14     prm[pn++] = 2;
15     for (int i = 3; i < N; i++, i++) {
16         if (!np[i]) prm[pn++] = i;
17         for (int j = 0, tmp; j < pn; j++) {
18             tmp = i * prm[j];
19             if (tmp >= N) break;
20             np[tmp] = true;
21             if (i % prm[j] == 0) break;
22         }
23     }
24 //    cout << pn << endl;
25 //    for (int i = 0; i < 10; i++) cout << prm[i] << endl;
26 }
27 
28 bool mk[1111111];
29 
30 int main() {
31 //    freopen("in", "r", stdin);
32     getbase();
33     int T;
34     long long a, b;
35     while (~scanf("%lld%lld", &a, &b)) {
36         a = max(2ll, a);
37         memset(mk, 0, sizeof(mk));
38         for (int i = 0; i < pn && prm[i] <= b; i++) {
39             long long t = a / prm[i] * prm[i];
40             if (t != a) t += prm[i];
41             t = max(t, (long long) prm[i] << 1);
42             for ( ; t <= b; t += prm[i]) mk[t - a] = true;
43         }
44         long long p = a;
45         int mini = 1111111, maxi = -1111111, minp, maxp;
46         while (p <= b && mk[p - a]) p++;
47         for (long long i = p + 1; i <= b; i++) {
48             if (mk[i - a]) continue;
49 //            cout << i << endl;
50             if (maxi < i - p) maxi = i - p, maxp = p;
51             if (mini > i - p) mini = i - p, minp = p;
52             p = i;
53         }
54         if (maxi < 0) puts("There are no adjacent primes.");
55         else printf("%d,%d are closest, %d,%d are most distant.\n", minp, minp + mini, maxp, maxp + maxi);
56     }
57     return 0;
58 }
View Code

 

 

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/p/poj_2689_Lyon.html

相关文章:

  • Oracle体系结构之SCN、实例恢复
  • C#算法大全-2-Algorithm Gossip: 费式数列
  • SCCM2012安装、配置
  • FreeBSD 使用手册
  • Cisco路由器配置与管理完全手册
  • JUC (Java Util Concurrency) 基础内容概述
  • UNIX网络编程——UDP编程模型
  • Linq 中按照多个值进行分组(GroupBy)
  • windows样式(style)参考
  • 绑定企业自有域名到Office 365订阅(二)
  • 让你的应用支持新iPad的Retina显示屏
  • Callable,Runnable比较及用法
  • 【原】IOS中KVO模式的解析与应用
  • Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
  • 工具篇:产品经理常用的工具
  • AWS实战 - 利用IAM对S3做访问控制
  • isset在php5.6-和php7.0+的一些差异
  • JAVA并发编程--1.基础概念
  • JAVA多线程机制解析-volatilesynchronized
  • learning koa2.x
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • miaov-React 最佳入门
  • Python 基础起步 (十) 什么叫函数?
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 观察者模式实现非直接耦合
  • 后端_MYSQL
  • 技术发展面试
  • 马上搞懂 GeoJSON
  • 算法系列——算法入门之递归分而治之思想的实现
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #14vue3生成表单并跳转到外部地址的方式
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (14)Hive调优——合并小文件
  • (SpringBoot)第七章:SpringBoot日志文件
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)EOS中账户、钱包和密钥的关系
  • (转)关于多人操作数据的处理策略
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .libPaths()设置包加载目录
  • .Net6使用WebSocket与前端进行通信
  • .Net多线程总结
  • .net访问oracle数据库性能问题
  • .net流程开发平台的一些难点(1)
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .NET中统一的存储过程调用方法(收藏)
  • ??eclipse的安装配置问题!??
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Android 13]Input系列--获取触摸窗口
  • [BZOJ4010]菜肴制作
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [cb]UIGrid+UIStretch的自适应
  • [CF226E]Noble Knight's Path