这两天和walls老师交流讨论了一个中学竞赛题,我把原题稍作增强和变形,得到如下一个题:

从105到204这100个数中至少要选取多少个数才能保证选出的数中必有两个不是互素的?

我们知道最小的几个素数为2、3、5、7、11、13、17、……,由17*17>204可知,105到204之间的所有合数都有不大于13的素因数。于是可以这样构建标号分别为2、3、5、7、11、13的6个集合:

逐个遍历105到204的所有合数,如果它被2整除,就把它加入到标号为2的集合里;否则考察标号更大一级的集合,即如果它被3整除,则把它加入到标号为3的集合里;依次类推,每一个合数都会被加入到6个集合中某一个集合里。

上面提供了一种具体的构造集合的方法。由构造规则易知,这6个集合中任何一个集合,只要其中的数多于一个的话,从中任选两个数,它们都有该集合对应的标号作为它们的非1公约数,即它们不是互素的。

当然,并不需要真的去逐个遍历合数并采用上述的构造法把每个合数加到对应的集合里。这是因为如下两个因素:

(1)由前面的105到204之间的所有合数都有不大于13的素因数这一结论就说明105到204之间的每一个合数都可以放到上述的6个集合中的某一个里。比如110,它的不大于13的素因数有2、5和11,因此可以把110放到标号为2、5、11的任意一个集合里都是可以的;

(2)105到204之间有足够多的合数确保上述6个集合都不为空,这为上述的每个集合找一个独有的数就好,121=11*11,只能放到标号为11的集合里;169=13*13,只能放到标号为13的集合里;119=7*17,只能放到标号为7的集合里;125=5*5*5,只能放到标号为5的集合里;111=3*37,只能放到标号为3的集合里;128=2^7,只能放到标号为2的集合里。

我们甚至不必关心这些合数具体是哪些以及总数有多少个,但我们需要知道105到204之间有多少个素数,不然这个题就做不出来。设所求素数总数为n,那么由鸽巢原理马上就知道本题所求的答案为n+7。

接下来探讨如何求105到204之间的素数总数的问题。

最直接的办法是使用Eratosthenes筛法。为减少书写,同时去除2、3、5的倍数,得:

107  109

113          119

121          127

131  133  137  139

143         149

151          157

161  163  167  169

173          179

181          187

191  193  197  199

203

接着标出7的倍数(品红色标注)、11的倍数(绿色标注)和13的倍数(浅青色标注)。

剩下没有被标记的数都是素数,一共有19个。

中午在稿纸上由Eratosthenes筛法演变出一种更少书写的新筛法,说明如下:

依次分行写出13、11、7的倍数清单(略去2、3、5的倍数以及重复的数)

13: 143, 169

11: 121, 187

7: 119, 133, 161, 203

遍历105到204的数,依次写下不是2、3、5的倍数且不在13、11、7的倍数清单里的数:

107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199

一共是19个素数。

由Eratosthenes筛法演变出的一种素数新筛法的更多相关文章

  1. 下面给出了四种设计模式的作用: 外观(F

    下面给出了四种设计模式的作用: 外观(Fa?ade :为子系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用: 装饰(Decorate):当不能采用生成子类的方法进行扩充时,动 ...

  2. 面试官:spring中定义bean的方法有哪些?我一口气说出了12种,把面试官整懵了。

    前言 在庞大的java体系中,spring有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜.我们都知道spring是创建和管理bean的工厂,它提供了多种定义bean的方式,能够满足我们日常工 ...

  3. poj2689 Prime Distance(素数区间筛法)

    题目链接:http://poj.org/problem?id=2689 题目大意:输入两个数L和U(1<=L<U<=2 147 483 647),要找出两个相邻素数C1和C2(L&l ...

  4. 找出10000内的素数 CSP

    "Problem: To print in ascending order all primes less than 10000. Use an array of processes, SI ...

  5. POJ-2689-Prime Distance(素数区间筛法)

    链接: https://vjudge.net/problem/POJ-2689 题意: The branch of mathematics called number theory is about ...

  6. Swift 中异常抛出和四种异常处理

    在Swift中你可以像其他语言一样抛出异常处理异常,今天我们就详细地说说Swift中的异常抛出和处理. 在一开始我们要定义错误或者说是异常,Swift中的一些简单异常可以使用枚举定义,注意这个枚举要继 ...

  7. 一口气说出Redis 5种数据结构及对应使用场景,面试要加分的

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  8. 基于Visual C++2013拆解世界五百强面试题--题10-找出N个数种最大的K个数

    有一亿个整数,请找出最大的 1000 个,要求时间越短越好, 空间占用越好越好. 如果不考虑时间效率,很容易想到解决方法,我们只需存储前一千个数, 然后依次读入后面的数和这一千个数组比较,替换其中比较 ...

  9. 长度为n的数组,有一个数重复出现了n/2+1次,找出(三种方法)

    问题: 长度为n的数组,有一个数重复出现了n/2+1次,找出这个数:   解决: 比较直接的思路是遍历每个元素,让其与剩下其他元素比较,相等一次计数器sum++,直到sum=n/2+1为止: #inc ...

随机推荐

  1. PGSQL基础语句汇总

    一.pgsql里面的数据类型不再介绍:https://www.runoob.com/postgresql/postgresql-data-type.html 二.常用基本语句 2.1.CREATE D ...

  2. SQL_之 递归_START WITH id ='102' CONNECT BY PRIOR pid=id

    oracle 递归用法 SELECT * FROM menu START WITH id ='102' CONNECT BY PRIOR pid=id 一种应用 SELECT * FROM menu ...

  3. OpenCV 之 特征检测

    特征,也称 兴趣点 或 关键点,如下:蓝框内区域平坦,无特征:黑框内有"边缘",红框内有"角点",后二者都可视为"特征" 角点作为一种特征, ...

  4. 大数据学习(25)—— 用IDEA搭建Spark开发环境

    IDEA是一个优秀的Java IDE工具,它同样支持其他语言.Spark是用Scala语言编写的,用Scala开发Spark是最舒畅的.当然,Spark也提供Java和Python的API. Java ...

  5. vulnhub-DC:6靶机渗透记录

    准备工作 在vulnhub官网下载DC:6靶机DC: 6 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 利用nmap ...

  6. DC-2 靶机渗透测试

    DC-2 靶机渗透测试 冲冲冲,好好学习. 本靶机核心内容"受限shell提权",知识点在另一篇文章中总结归纳了. 攻击机:kali 靶 机:DC-2 准备:在使用前需要在操作机的 ...

  7. 【爬虫系列】1. 无事,Python验证码识别入门

    最近在导入某站数据(正经需求),看到他们的登录需要验证码, 本来并不想折腾的,然而Cookie有效期只有一天. 已经收到了几次夜间报警推送之后,实在忍不住. 得嘞,还是得研究下模拟登录. 于是,秃头了 ...

  8. netty系列之:使用POJO替代buf

    目录 简介 decode和encode 对象序列化 使用编码和解码器 总结 简介 在之前的文章中我们提到了,对于NioSocketChannel来说,它不接收最基本的string消息,只接收ByteB ...

  9. 物理机安装ESXi并优化部署虚拟机

    物理机配置 CPU,BIOS中启用虚拟化(VT-X) 内存和硬盘,内存尽量大.硬盘最好SSD,内存的大小和硬盘的速度直接决定了虚拟机运行的快慢 网络,至少一块千兆网卡(vSphere7.0版本以后支持 ...

  10. Notes about BSD

    FreeBSD: mainly for web server; OpenBSD: mainly for security concerned server;