这两天和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. Python 机器学习实战 —— 无监督学习(上)

    前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...

  2. POJ1944

    poj1944 一道我不会做的贪心题. (思维才是OI的重点) 但是if您也不会,那就来听我瞎扯吧. 首先,这个图是一个圈,只能连接邻点,使所有求的点联通. 我们先不考虑环,那么就可以想出一个假的做法 ...

  3. python使用正则+jsonpath处理接口依赖

    1.接口2的入参值依赖接口1的响应结果,如接口2的入参ids需要拿到接口1响应结果的id字段值,测试用例写在excel中,参数:{"ids":"${$..id}$&quo ...

  4. SLF4J日志桥接的应用

    最近在给公司的测试部门开发一套自动化测试框架,为了是框架产生的测试报告更易于分析,我考虑将每一个用例与运行过程中产生的日志相关联,为了实现这样的效果,首先就需要统一项目的日志输出,那么具体怎么做呢? ...

  5. java方法基础

    java方法基础 方法的定义与调用 方法是命名的语句的有序集,是解决一类问题的步骤的有序组合. 方法包含于类或者是对象中,方法在程序中被创建,在其他地方被引用. 组成:方法是由方法头和方法体两部分组成 ...

  6. Redis(6379)未授权访问

    环境搭建 打开kali终端 输入命令 wget http://download.redis.io/releases/redis-3.2.0.tar.gz tar xzf redis-3.2.0.tar ...

  7. C语言复习(一)

    类型为void*的指针代表对象的地址,而不是类型 如果需要使用另一个源文件中定义的变量,那么只需要在定义变量前加上extern关键字 ex: extern int x;//x在其他文件中定义 左值表达 ...

  8. Vue学习笔记(二)动态绑定、计算属性和事件监听

    目录 一.为属性绑定变量 1. v-bind的基本使用 2. v-bind动态绑定class(对象语法) 3. v-bind动态绑定class(数组语法) 4. v-bind动态绑定style(对象语 ...

  9. Feign实战技巧篇

    介绍Feign在项目中的正确打开方式 看了上一期Feign远程调用的小伙伴可能会问:阿鉴,你不是说上一期讲的是Feign的99%常用方式吗?怎么今天还有正确打开方式一说呀? 阿鉴:是99%的常用方式, ...

  10. Android达到什么水平才能顺利拿到 20k 无压力?

    程序员分很多种类和等级,如果要提高达到20k的概率,有两个条件如果满足的话,则很容易达到: 1.一线城市:北上广深杭 2.互联网行业 如果你非得抬杠,我要在三线城市,做外包要赚20k的话,很难,我自己 ...