2. Prime Generator

任务很简单,生成m到n之间的所有质数。一个比较常见的思路是:

自然数$1, 2, …, N$中的最大的质因子要小于$\sqrt{N}$。所以用m到n中的每一个数去试除1到$\sqrt{n}$中的所有数。能整除就是合数,全不能整除就是质数。

但是这么做会超时。。

一般生成质数有一个常用的算法:筛法

http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95 (wiki)的地址

这里边讲的非常好,也给出了伪代码。

主要是在自然数$[2, \sqrt{n}]$中生成一个逻辑序列,假设default都是True,从2开始把$i$的$i(i, (i+1), (i+2), …, (i+q)…)$全部变成False,然后从下一个TRUE开始循环。循环后可以得到所有$[2, \sqrt{n}]$的质数,然后用$[m, n]$里的数去除这些含这些质因子的倍数的数们。。

就是这样啦~

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import mathdef segment_sieve(a,b):N = int(math.ceil(math.sqrt(b)))is_prime_small = [True for x in range(N)]is_prime = range(a,b)for i in range(2,N):if is_prime_small[i] :for j in range(2*i,N,i):is_prime_small[j] = Falsefor j in range(max(2,(a+i-1)/i)*i, b, i):is_prime[j-a] = 1return filter(lambda x:x>1, is_prime)def main():T = int(sys.stdin.readline())for t in range(T):if t>0 :printn,m = [int(x) for x in sys.stdin.readline().split(' ')]primes = segment_sieve(n,m+1)for i in primes:print iif __name__ == '__main__' :main()

转载于:https://www.cnblogs.com/xmuer/p/3806905.html

SPOJ Python Day2: Prime Generator相关推荐

  1. Python错误:AttributeError: 'generator' object has no attribute 'next'解决办法

    今天在学习生成器对象(generation object)运行以下代码时,遇到了一个错误: #定义生成器函数 def liebiao(): for x in range(10): yield x #函 ...

  2. spoj 2 Prime Generator

    题目:Prime Generator 思路:分段筛素数 #include <cstdio> #include <iostream> #include <cmath> ...

  3. Day2:python爬虫基础学习(大嘘)

    Day2:python爬虫基础学习(大嘘)) 教材&参考: 学习过程 Sublime配置教程 下载&安装 语言(设置中文) 设置字体/配色 配置Python环境 使用python官方编 ...

  4. python笔记: 生成器

    元素按照某种算法推算出来,我们在循环的过程中不断推算出后续的元素 不必创建完整的list,从而节省了大量的空间 这种一边循环一遍计算的机制,称之为生成器generator 1 列表生成器 把列表生成式 ...

  5. Python学习:深入Python流程控制

    本文来自:入门指南 开胃菜参考:开胃菜 使用Python解释器:使用Python解释器 本文对Python的简介:Python简介 目录: 目录: 4. 深入 Python 流程控制 4.1. if ...

  6. python基础:迭代器、生成器(yield)详细解读

    1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 1.1 使用迭代 ...

  7. Python enumerate():使用计数器简化循环

    摘要:当您需要计数和迭代中的值时,Pythonenumerate()允许您编写 Pythonicfor循环.最大的优点enumerate()是它返回一个带有计数器和值的元组,因此您不必自己增加计数器. ...

  8. Python String:一文彻底粉碎字符串

    一.组合数据类型container objects 组合数据类型container objects:能够表示多个数据的类型 集合类型:集合类型是一个元素集合,元素无序不重不变 序列类型:序列类型是一个 ...

  9. Python算法:推导、递归和规约

    Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...

最新文章

  1. 如何在mac终端上使用python3.5
  2. Ubuntu 16.04系统下CUDA8.0配置Caffe教程
  3. python sort 部分元素_Python 犄角旮旯--List
  4. node MySQL buffer_node.js中buffer方法使用说明
  5. Spring Session Redis——自定义JSON序列化解决方案
  6. QT的QDBusReply类的使用
  7. ASP.NET自带的散列加密口令【转】
  8. LeetCode 581. Shortest Unsorted Continuous Subarray
  9. 久等了,你要的 Python 书籍推荐,来了
  10. 沣西新城大数据产业园:打造大数据全生态链
  11. 华为ipop使用教程_华为ipop下载|
  12. java 解决内存泄露_Java内存泄露的理解与解决
  13. 鸿蒙系统对小米的影响,“小米用鸿蒙系统”乌龙会对后续有影响吗
  14. 项目中的通用查询参数类,它体现了项目架构的大局观
  15. IDEA中jclasslib插件修改本地化语言为英文的方法
  16. w10计算机运行特别卡,win10电脑卡顿的五种原因及解决方法
  17. 铁路订票系统的简单设计(转自云风)
  18. Endless无限循环·数字化趋势
  19. ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索
  20. 正在找工作的程序员们,一定要注意新型劳务派遣套路

热门文章

  1. linux中bind9源码包安装使用,编译安装bind9
  2. npm 查看当前生效的配置
  3. 【若依(ruoyi)】quartz.sql 脚本重新导入时,遇到因foreign key外键无法删除错误#1217
  4. 【css】行高的计算
  5. list.action.php,教你利用 PHP 实现高性能微服务部署
  6. fiddler如何设置过滤https_Google Analytics如何设置含有过滤器的帐户数据视图
  7. android检查新版本,详解Android Studio无法检测新版本问题解决
  8. psid mysql_MySQL数据双向同步解决方案(推荐)
  9. 从零开始学习docker(八)多台机器通信
  10. 四十二、ETL工具Kettle的转换步骤